Это может быть мое непонимание стека вызовов при использовании Core Animation, но что-то меня немного смущает, кто / что вызывает drawInContext.
Допустим, у меня есть
@interface PlayerLayer : CALayer
{
int Foo;
}
и я инициализирую Foo в init как что-то вроде
-(void) init
{
if( self = [super init] )
{
Foo = 123;
}
}
Когда вызывается drawInContext, я распечатываю Foo
- (void)drawInContext:(CGContextRef)ctx
{
NSLog(@"Foo: %d", Foo)
}
Первый раз, когда вызывается drawInContext, когдадобавляется слой, и setNeedsDisplay запускает вызов, Foo = 123, как и должно быть.
У меня настроена анимация, например, для ключа свойства, называемого «Bar», в котором «needsDisplayForKey» возвращает YES для ключа »Бар".Когда эта анимация запускает «drawInContext», все переменные экземпляра устанавливаются в 0, и поэтому Foo печатает как 0. Также изменилось значение указателя «self».
Может ли кто-нибудь пролить свет на то, почему drawInContext кажетсябыть вызванным из какого-то другого магического места, а не из экземпляра слоя, который, как я ожидаю, будет?
Это означает, что любые переменные состояния, которые я сохранил в экземпляре, не могут быть использованы :-(