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】:UIView
和NSView
的工作方式不同。您发布的代码足以满足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 8/Swift 3 中创建 iOS liveView [重复]