这个错误快把我逼疯了……每次我从 Xcode 运行我的应用程序时,我的面板都会以随机顺序绘制它的图层!即使子视图顺序完好无损!!
NSPanel
该应用程序是一个状态栏应用程序,当用户单击状态项时会显示一个简单的。是从笔尖加载的NSPanel
,我不能说我做的更多!
我对CALayer
s 做了什么奇怪的事情吗?绝对不是......我所拥有的KMStatusPanelView
只是一个覆盖-[NSView drawRect:]
。具有以下KMRootView
内容:
在KMRootVC
中,这是 的视图控制器KMRootView
,我有:
- (void)awakeFromNib
{
[super awakeFromNib];
NSAssert(self.view.layer, @"Layer not created");
[self.view.layer setCornerRadius:18.0];
[self _loadControllerAtIndex:0];
}
.. 和 in KMRootView
,我覆盖-[NSView drawRect:]
,并且还有:
- (void)awakeFromNib
{
[super awakeFromNib];
NSAssert(self.layer, @"Layer not found");
[self.layer setMasksToBounds:YES];
}
而已!这就是与核心动画层相关的所有代码,除了我勾选了 IB 中的复选标记来为我创建层,而不是调用-[NSView setWantsLayer:]
.
这是来自两次不同运行的日志(我已经删除了大部分不相关的数据):
显然,KMRootView
应该在底部,正如您从-[NSView subviews]
输出中看到的那样。
以正确的结果运行:
$2 = 0x000000010029b260 <__NSArrayM 0x10029b260>(
<KMRootView: 0x10029c400>,
<KMStatusPanelView: 0x100248a30>
)
(lldb) po [[[self.window contentView] layer] sublayers]
$3 = 0x0000000100264e50 <CALayerArray 0x100264e50>(
<_NSViewBackingLayer:...; bounds = CGRect (0 0; 320 480); delegate = <KMRootView: 0x10029c400>; sublayers =...,
<_NSViewBackingLayer:...; bounds = CGRect (0 0; 320 488); delegate = <KMStatusPanelView: 0x100248a30>;...
)
运行错误的结果:
$0 = 0x000000010023aa40 <__NSArrayM 0x10023aa40>(
<KMRootView: 0x102430f70>,
<KMStatusPanelView: 0x102430660>
)
(lldb) po [[[self.window contentView] layer] sublayers]
$1 = 0x000000010242d2c0 <CALayerArray 0x10242d2c0>(
<_NSViewBackingLayer:...; bounds = CGRect (0 0; 320 488); delegate = <KMStatusPanelView: 0x102430660>;...,
<_NSViewBackingLayer:...; bounds = CGRect (0 0; 320 480); delegate = <KMRootView: 0x102430f70>; sublayers = ...
)