【问题标题】:Xcode 8 Playground doesn't display NSViewXcode 8 Playground 不显示 NSView
【发布时间】:2017-03-10 23:20:48
【问题描述】:

Xcode 不会在操场上显示NSView。但它显示UIView 没有任何问题。是bug吗?

代码:

let view = NSView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.layer?.backgroundColor = NSColor.white.cgColor
PlaygroundPage.current.liveView = view

Xcode Playground 也很慢。有什么办法可以加快操场的速度吗?

【问题讨论】:

    标签: xcode xcode8 swift-playground


    【解决方案1】:

    UIViewNSView 的工作方式不同。您发布的代码足以满足UIView 的需求,但不足以满足NSView 的需求。

    根据NSView 的 Apple 文档:

    NSView 对象为绘图、打印、 和处理应用程序中的事件。你通常不使用 NSView 对象 直接地。相反,您使用其类从 NSView 派生的对象 或者你自己继承 NSView 并重写它的方法来实现 你需要的行为。

    draw(_:) 绘制 NSView 对象。 (所有子类都必须实现这个 方法,但很少显式调用。)

    所以,你必须继承NSView并实现draw(_:)

    代码如下:

    import Cocoa
    import PlaygroundSupport
    
    
    class view: NSView
    {
        override init(frame: NSRect)
        {
            super.init(frame: frame)
        }
    
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        override func draw(_ dirtyRect: NSRect)
        {
            NSColor.blue.setFill()
            NSRectFill(self.bounds)
        }
    }
    
    var v = view(frame: NSRect(x: 0, y: 0, width: 200, height: 200))
    
    PlaygroundPage.current.liveView = v
    

    输出:


    在 Playground 中使用 iOS 比使用 macOS 更好,因为它很简单,而且您可以找到大量教程或答案。

    【讨论】:

    • 感谢您的回答。由于缺乏教程,我也在考虑在 Playground 中使用 iOS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多