cocoa:CALayer的索引

时间:2012-03-06 22:58:59

标签: cocoa calayer nsview

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

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

如何确定CALayer的索引?

2 个答案:

答案 0 :(得分:2)

当我添加它们时,我最终设置了每个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];
}

答案 1 :(得分:0)

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

猜测:

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

因此,如果您给出的图层位于演示树中,则可能有效:

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