Xcode 8 Playground 不显示 NSView

Posted

技术标签:

【中文标题】Xcode 8 Playground 不显示 NSView【英文标题】:Xcode 8 Playground doesn't display 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 也很慢。有什么办法可以加快操场的速度吗?

【问题讨论】:

【参考方案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。

以上是关于Xcode 8 Playground 不显示 NSView的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode Playground 中将 NSString 转换为 CString

Xcode & Playground 不显示结果窗口

如何在 Xcode 8/Swift 3 中创建 iOS liveView [重复]

Xcode 7 Playground 中没有显示轴

Xcode 6 Beta / Swift - Playground 未更新

获取 Playground 以显示所有循环结果