Animer personnalisé CALayer propriétés à l'intérieur d'un CATransaction
Jusqu'à maintenant j'ai été capable d'animer les propriétés personnalisées de mon CALayer sous-classe, grâce à + (BOOL)needsDisplayForKey:(NSString *)key
et CABasicAnimations
.
Cependant, il s'avère que le chaînage des animations peuvent devenir très difficile parce que tout le code se déroule dans un seul animationDidStop:finished:
méthode.
Donc je voulais passer à CATransactions
depuis qu'ils soutiennent le nouveau bloc de la syntaxe, ce qui me permet de spécifier un achèvement bloc avec + (void)setCompletionBlock:(void (^)(void))block
.
Mais il me semble que CATransaction
ne peut animer la soi-disant "propriétés animables" et il ne fonctionne pas avec mon custom propriétés de la couche, même avec la needsDisplayForKey:
méthode mise en œuvre.
Donc, il y a une façon de faire de propriétés personnalisées dans un CALayer
pour animer avec CATransaction
?
EDIT:
Mon intention est de faire quelque chose le long des lignes de:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
NSLog(@"blabla");
}];
myLayer.myProperty = newValue;
[CATransaction commit];
La mise à jour de myProperty de la valeur à newValue
n'est pas animé. J'ai essayé de mettre en œuvre
actionForLayer:forKey:
dans la vue gestion des myLayer retour d'un CABasicAnimation
. Mais actionForLayer:forKey:
n'est jamais appelé avec la touche myProperty
. Et oui, myLayer
n'est pas view.layer
mais une sous-couche, et oui j'ai mis le délégué de myLayer
de la vue.
OriginalL'auteur romrom | 2010-11-08
Vous devez vous connecter pour publier un commentaire.
Je crois, d'après mes lecture de code source, que vous pouvez toujours utiliser un
CABasicAnimation
dans leCATransaction
. ToutCAAnimations
ajouté entre les[CATransaction begin]
et[CATransaction commit]
devrait être une partie de la transaction.Excuses que je n'ai pas de projet d'installation pour tester facilement maintenant, mais je crois qu'il va travailler.
Vérifier ces site pour le code:
Code que j'ai référencé:
OriginalL'auteur Jonathan Branam
Il y a une grande classe appelée CAAnimationBlocks, et a expliqué ici, qui est une catégorie sur CAAnimation qui vous permet d'utiliser l'achèvement de blocs comme vous le feriez sur une UIView.
Vous l'utiliser simplement en appelant le:
OriginalL'auteur adamsiton