какао: индекс за CALayer

Правя разширено чертане в моя подклас NSView, използвайки CALayers, използвайки -(void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx В това обратно извикване ми е даден CALayer, но трябва да знам z-индекса на този слой в произволно голям списък от слоеве (всички от които са подслоеве на коренов слой).

Опитах int index = [self.layer.sublayers indexOfObject:someCALayer];, но това не изглежда да работи.

Как мога да определя индекса на CALayer?


person mtmurdock    schedule 06.03.2012    source източник


Отговори (2)


В крайна сметка зададох свойството z-index на всеки CALayer, докато ги добавях, и го използвах, за да определя позицията.

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

Няма метод -drawFrameLayer:inContext: в CoreAnimation или AppKit, така че е трудно да се каже много определено за слоя, който предоставя. (Предполагам, че идва от някаква рамка на трета страна?)

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

Като цяло слоевете, с които работите, са част от „моделното дърво“ на CoreAnimation. Вътрешно CA прави копия на тези слоеве, които са "представителното дърво". Можете да намерите съответното копие, като използвате методите -modelLayer и -presentationLayer.

Така че, ако слоят, който ви е даден, е в дървото на презентацията, това може да работи:

[self.layer.sublayers indexOfObject:someCALayer.modelLayer]
person Kurt Revis    schedule 07.03.2012
comment
Извинете ме, това беше печатна грешка във въпроса (но не и в моя код). Фиксиран за -(void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx - person mtmurdock; 07.03.2012