Cocoa 可可:卡拉耶指数

Cocoa 可可:卡拉耶指数,cocoa,calayer,nsview,Cocoa,Calayer,Nsview,我正在NSView子类中使用CALayers使用-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx进行一些高级绘图。在这个回调中,我得到了一个CALayer,但我需要知道任意大的层列表中该层的z索引(所有层都是根层的子层) 我尝试了int index=[self.layer.sublayers indexOfObject:someCALayer]但这似乎不起作用 如何确定CALayer的索引?在CoreAnimation或Ap

我正在NSView子类中使用CALayers使用
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx进行一些高级绘图。在这个回调中,我得到了一个CALayer,但我需要知道任意大的层列表中该层的z索引(所有层都是根层的子层)

我尝试了
int index=[self.layer.sublayers indexOfObject:someCALayer]但这似乎不起作用


如何确定CALayer的索引?

在CoreAnimation或AppKit中没有方法
-drawFrameLayer:inContext:
,因此很难确定它提供的层。(我假设它来自某个第三方框架?)

猜测:

通常,您使用的层是CoreAnimation的“模型树”的一部分。在内部,CA复制这些层,即“表示树”。您可以使用
-modelLayer
-presentationLayer
方法找到相应的副本

因此,如果给定的层位于表示树中,这可能会起作用:

[self.layer.sublayers indexOfObject:someCALayer.modelLayer]

最后,我在添加每个CALayer时设置了它们的z-index属性,并用它来确定位置

for (int x = 0; x < NUM_LAYERS; x++) {
   CALayer* layer = [[CALayer alloc] init];
   // initialize stuff
   layer.zPosition = x;
   [self.layer addSublayer:layer];
}
for(int x=0;x
请原谅,这是问题中的输入错误(但不是我的代码)。固定到
-(void)drawLayer:(CALayer*)层inContext:(CGContextRef)ctx