gpt4 book ai didi

macos - Cocoa 中的 CALayer 随机排序 (Mac OS)

转载 作者:行者123 更新时间:2023-12-03 16:41:36 24 4
gpt4 key购买 nike

这个错误让我发疯...每次我从 Xcode 运行我的应用程序时,我的面板都会以随机顺序绘制它的图层!即使 subview 顺序完好无损!!

该应用程序是一个状态栏应用程序,当用户单击状态项时,它会显示一个简单的 NSPanelNSPanel 是从 Nib 加载的,我不能说我做了更多的事情!!

我对 CALayer 做了什么奇怪的事情吗?绝对不是...我在 KMStatusPanelView 中拥有的只是一个覆盖的 -[NSView drawRect:]KMRootView 具有以下内容:

KMRootVC 中,它是 KMRootView 的 View Controller ,我有:

- (void)awakeFromNib
{
[super awakeFromNib];

NSAssert(self.view.layer, @"Layer not created");
[self.view.layer setCornerRadius:18.0];
[self _loadControllerAtIndex:0];
}

.. 在 KMRootView 中,我重写 -[NSView drawRect:],并且还具有:

- (void)awakeFromNib
{
[super awakeFromNib];

NSAssert(self.layer, @"Layer not found");
[self.layer setMasksToBounds:YES];
}

就是这样!这就是与核心动画层相关的所有代码,除了我在 IB 中勾选了复选标记来为我创建层,而不是调用 -[NSView setWantsLayer:]。 p>

这是两次不同运行的日志(我删除了大部分不相关的数据):
显然,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 = ...
)

最佳答案

不要使用 IB 在层次结构中的任何位置启用图层支持的 View ,而是在 awakeFromNib 中调用 setWantsLayer:YES

关于macos - Cocoa 中的 CALayer 随机排序 (Mac OS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com