Animieren Sie benutzerdefinierte CALayer-Eigenschaften in einer CATransaction

8

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.

    
romrom 08.11.2010, 08:49
quelle

2 Antworten

10

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.

%Vor%

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%     
Jonathan Branam 09.11.2010, 14:07
quelle
1

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%     
adamsiton 22.12.2011 16:38
quelle