2012-03-06 3 views
0

Я делаю некоторый расширенный чертеж в моем подклассе NSView, используя CALayers, используя -(void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx В этом обратном вызове мне дается CALayer, но мне нужно знать z-индекс этого слоя в сколь угодно большом списке слоев (все из которых являются подслоями корневого слоя).cocoa: index для CALayer

Я пробовал int index = [self.layer.sublayers indexOfObject:someCALayer];, но это не работает.

Как определить индекс CALayer?

ответ

2

Я в конечном итоге установка г-индексный свойство каждого CALayer как я добавил их, и использовал это для определения положения.

for (int x = 0; x < NUM_LAYERS; x++) { 
    CALayer* layer = [[CALayer alloc] init]; 
    // initialize stuff 
    layer.zPosition = x; 
    [self.layer addSublayer:layer]; 
} 
0

В CoreAnimation или AppKit нет метода -drawFrameLayer:inContext:, поэтому трудно сказать многое о слое, который он предоставляет. (Я предполагаю, что это происходит от каких-то рамок третьей стороны?)

Предположения:

Как правило, слои с которыми вы работаете, являются частью «модель дерева» CoreAnimation в. Внутренне CA делает копии этих слоев, которые являются «деревом представления». Вы можете найти соответствующую копию, используя методы -modelLayer и -presentationLayer.

Таким образом, если слой вы дали в дереве представления, это может работать:

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

Простите меня, это была опечатка в вопросе (но не в моем коде). Исправлено для слоя '- (void) drawLayer: (CALayer *) inContext: (CGContextRef) ctx' – mtmurdock

Смежные вопросы