我用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/

现在,如果您将视图子类化并在wantsUpdateLayerNSView属性上返回YES / true,则可以在updateLayer中更新图层。请注意,这将导致AppKit不再调用drawRect

关于macos - 在wantLayer = true之后,为什么图层为零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40822188/

10-10 17:28