Cela peut être mon manque de compréhension de la pile d'appels lors de l'utilisation de Core Animation, mais quelque chose me perturbe un peu à propos de qui/appelle drawInContext.L'appel de CABasicAnimation à drawInContext provoque la remise à zéro des variables d'instance
Disons que je
@interface PlayerLayer : CALayer
{
int Foo;
}
et j'initialiser Foo init pour être quelque chose comme
-(void) init
{
if(self = [super init])
{
Foo = 123;
}
}
Lorsque drawInContext est d'abord appelé, j'imprimer Foo
- (void)drawInContext:(CGContextRef)ctx
{
NSLog(@"Foo: %d", Foo)
}
Le La première fois que 'drawInContext' est appelé lorsque la couche est ajoutée et que setNeedsDisplay déclenche l'appel, Foo = 123 devrait.
J'ai une animation configurée pour une clé de propriété appelée "Bar" par exemple, dans laquelle 'needsDisplayForKey' renvoie YES pour la clé "Bar". Lorsque cette animation déclenche «drawInContext», toutes les variables d'instance sont définies sur 0 et, en tant que telles, Foo s'imprime en tant que 0. La valeur du pointeur «self» a également changé. Quelqu'un peut-il faire la lumière sur pourquoi DrawInContext semble être appelé à partir d'un autre endroit magique, et non pas à partir de l'instance de la couche que je m'attends à ce qu'il soit?
Cela signifie que toutes les variables d'état que j'ai stockées dans l'instance ne peuvent pas être utilisés :-(
Merci Ole, je pensais que c'était peut-être le cas alors j'ai essayé. Savez-vous dans la documentation que je pourrais trouver des informations sur le processus de copie? Ou, avez-vous un ide un sur la façon d'accéder à ces données à partir d'une animation? – Fuzz
Vous avez raison, sauf que les propriétés ne semblent pas être copiées automatiquement. Au lieu de cela, l'utilisateur peut remplacer initWithLayer et forcer la copie des propriétés personnalisées. Voir: http://stackoverflow.com/questions/2797103/how-is-la-presentation-layer-of-a-calayer-generated – Fuzz