Animieren Sie benutzerdefinierte CALayer Eigenschaften innerhalb einer CATransaction
Bis jetzt hab ich in der Lage gewesen zu animieren, die eigenen Eigenschaften meiner CALayer Unterklasse, Dank + (BOOL)needsDisplayForKey:(NSString *)key
und CABasicAnimations
.
Doch es stellt sich heraus, dass die Verkettung von Animationen kann sich sehr schwierig, da der gesamte code, der findet in einem einzigen animationDidStop:finished:
Methode.
Also wollte ich wechseln zu CATransactions
da Sie die Unterstützung der neuen block-syntax, die mir erlauben würde, geben Sie eine Abschluss-block mit + (void)setCompletionBlock:(void (^)(void))block
.
Aber es scheint mir, dass CATransaction
können nur animieren, die so genannte "animierbare Eigenschaften", und es funktioniert nicht mit meiner benutzerdefinierten layer-Eigenschaften, sogar mit der needsDisplayForKey:
Methode implementiert.
Gibt es also eine Möglichkeit, benutzerdefinierte Eigenschaften in einem CALayer
zu animieren, mit CATransaction
?
EDIT:
Meine Absicht ist, zu tun, etwas entlang der Linien:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
NSLog(@"blabla");
}];
myLayer.myProperty = newValue;
[CATransaction commit];
Dem update von myProperty-Wert zu newValue
ist nicht animiert. Ich habe versucht zu implementieren
actionForLayer:forKey:
in der Ansicht verwalten myLayer, um wieder eine CABasicAnimation
. Aber actionForLayer:forKey:
wird niemals aufgerufen, mit der Taste myProperty
. Und ja, myLayer
ist nicht view.layer
aber eine Unterebene, und ja ich habe die Delegierten myLayer
an die übergeordnete Ansicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube ich, basierend auf meiner Lektüre von einigen source-Codes, dass Sie immer noch mit einem
CABasicAnimation
innerhalb derCATransaction
. AlleCAAnimations
zwischen den[CATransaction begin]
und[CATransaction commit]
sollte ein Teil der Transaktion.Entschuldige mich, dass ich nicht haben ein Projekt-setup, um dies leicht testen, jetzt, aber ich glaube, es wird funktionieren.
Überprüfen Sie diese Website für den code:
Code, den ich verwiesen:
Es gibt eine große Klasse namens CAAnimationBlocks, und erklärt hier, das ist eine Kategorie auf CAAnimation, mit dem Sie die Fertigstellung der Blöcke wie würden Sie auf einer UIView.
Verwenden Sie es, indem Sie einfach aufrufen: