Animieren Sie die frame-Eigenschaft über CABasicAnimation
Ich versuche zu machen, eine genaue "übersetzung" dieser UIView block-basierte animation-code:
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
someView.frame = CGRect(0, 100, 200, 200);
}
completion:nil];
mit CABasicAnimation statt.
Ich bin mir völlig bewusst, dass die frame-Eigenschaft ist eigentlich eine Kombination von position, Grenzen und anchorPoint der darunter liegenden Schicht, wie es hier beschrieben wird: http://developer.apple.com/library/mac/#qa/qa1620/_index.html
... und ich schon ne Lösung wie das mit zwei CABasicAnimations eine Einstellung der position, eine für Grenzen und es funktioniert für diese eine view.
Das problem ist jedoch, dass ich Untersichten in meinem Blick. someView hat eine Untersicht des Typs UIScrollView, in dem ich Platz noch eine Untersicht Typ UIImageView. UIScrollView Untersicht hat autoresizingMask eingestellt UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight. Das funktioniert alles perfekt, wenn ich die UIView block-basierte version, aber wenn ich versuche mit CABasicAnimations die Untersichten start verhält sich unerwartet(D. H. in der Größe verändert, um falsche Breite). So scheint es autoresizingMask funktioniert nicht einwandfrei, wenn Sie CABasicAnimations. Mir ist auch aufgefallen, dass Untersichten nicht einen Anruf erhalten, um setFrame:, obwohl die frame-Eigenschaft der übergeordneten Ansicht ändern, nachdem die änderungen Ebene Lage und Grenzen gemacht werden.
Deshalb würde ich gerne wissen, was wäre der richtige code zu replizieren mit CABasicAnimation, dass das, was passiert, wenn eine verwendet UIView ' s animateWithDuration Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, aber es ist auch wichtig zu beachten, dass
frame
ist nicht animierbar-Eigenschaft für die Ebenen. Wenn Sie möchten, zu animieren, mit CABasicAnimation müssen Sie Eigenschaften sind animierbar für die Ebenen. Die CALayer Dokumentation markiert jede solche Eigenschaft, die als explizit "animiert". Die Idee, mitbounds
undposition
korrekt ist.So, dieser code macht im Grunde das, was Sie Taten, bevor:
Jedoch, dass der code hat keine Auswirkung auf die Größe der unteren Schichten der
v.layer
. (Eine Untersichtv
gezeichnet wird, durch eine Schicht vonv.layer
.) Leider ist das problem, das Sie lösen möchten. Ich glaube, dass durch hinunter bis auf die Ebene der Schichten und der direkte explicit core animation, Sie haben aufgegeben, autoresizing, was passiert in der view-Ebene. Sie müssen daher animieren die Unterschichten als gut. Das ist, was anzeigen animation war für Sie tut.Dies ist eine unglückliche feature von iOS. Mac OS X hat-layer Einschränkungen (CAConstraint), die auf layer-Ebene, was autoresizing nicht auf die view-Ebene (und mehr). Aber iOS fehlt diese Funktion.