我用Xcode 8创建了一个新的OS X项目,添加了一个(图像)视图。我将其拖动到默认的ViewController源,以添加一个@IBOutlet(名为“image”)。然后在viewDidLoad()
中,我添加了:
image.wantsLayer = true
image.layer!.cornerRadius = 10
大约有一半时间,它工作正常,而大约一半时间,它死于:
fatal error: unexpectedly found nil while unwrapping an Optional value
指向第二行并在调试器中:
(lldb) po image.wantsLayer
true
(lldb) po image.layer
nil
设置
wantsLayer
是否应该立即创建layer
?文档似乎暗示了这一点,但我找不到明确说明这一点的声明。我看过很多代码like this,它们使NSView可以:
self.wantsLayer = true
self.layer!.backgroundColor = ...
因此似乎应该这样做。设置
layer
后,为什么wantsLayer
为nil?即使我要求layer
,我也应该自己设置wantsLayer
吗? 最佳答案
对于OS X上的层支持视图,建议不要直接与层对象进行交互。该层归AppKit所有。这里也用几个词来描述:https://www.objc.io/issues/14-mac/appkit-for-uikit-developers/
现在,如果您将视图子类化并在wantsUpdateLayer
的NSView
属性上返回YES / true,则可以在updateLayer
中更新图层。请注意,这将导致AppKit不再调用drawRect
。
关于macos - 在wantLayer = true之后,为什么图层为零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40822188/