Bis jetzt konnte ich die benutzerdefinierten Eigenschaften meiner CALayer-Unterklasse dank + (BOOL)needsDisplayForKey:(NSString *)key
und CABasicAnimations
animieren.
Es stellt sich jedoch heraus, dass Verkettungs-Animationen sehr schwierig werden können, da der gesamte Code in einer einzigen animationDidStop:finished:
-Methode stattfindet.
Ich wollte also zu CATransactions
wechseln, da sie die neue Block-Syntax unterstützen, die es mir erlauben würde, einen Abschlussblock mit + (void)setCompletionBlock:(void (^)(void))block
anzugeben.
Aber es scheint mir, dass CATransaction
nur die sogenannten animierbaren Eigenschaften animieren kann und nicht mit meinen benutzerdefinierten Layer-Eigenschaften funktioniert, selbst wenn die Methode needsDisplayForKey:
implementiert wurde.
Gibt es also eine Möglichkeit, benutzerdefinierte Eigenschaften in CALayer
mit CATransaction
zu animieren?
BEARBEITEN: Meine Absicht ist, etwas in die Richtung zu tun:
%Vor% Die Aktualisierung von myProperty auf newValue
ist nicht animiert. Ich habe versucht zu implementieren
actionForLayer:forKey:
in der Ansicht, die myLayer verwaltet, um CABasicAnimation
zurückzugeben. Aber actionForLayer:forKey:
wird niemals mit dem Schlüssel myProperty
aufgerufen. Und ja, myLayer
ist nicht view.layer
, sondern eine Unterschicht, und ja, ich habe den Delegaten von myLayer
auf die enthaltene Ansicht gesetzt.
Ich glaube, basierend auf meinem Quellcode, dass Sie immer noch CABasicAnimation
in CATransaction
verwenden können. Jede CAAnimations
, die zwischen [CATransaction begin]
und [CATransaction commit]
hinzugefügt wird, sollte Teil der Transaktion sein.
Entschuldigung, dass ich kein Projekt-Setup habe, um das jetzt einfach zu testen, aber ich glaube, es wird funktionieren.
Überprüfen Sie diese Website auf den Code:
Code, auf den ich verwiesen habe:
%Vor%Es gibt eine großartige Klasse namens CAAnimationBlocks und erklärt hier , das ist eine Kategorie in CAAnimation, mit der Sie Completion-Blöcke wie in einer UIView verwenden können.
Sie verwenden es einfach, indem Sie Folgendes aufrufen:
%Vor%Tags und Links iphone core-animation properties catransaction