ich zur Zeit lese Apples Core Animation Guide, wo ich die folgende Passage in Bezug auf Schicht-backed Ansichten in iOS gefunden:Warum zeigen Dokumente an, dass CALayer-Animationen in UIView-Animationsblöcken enthalten sein müssen?
Wenn Sie Animationen Core Animation-Klassen verwenden möchten zu initiieren, müssen Sie alle Ihre Core Animation Anrufe ausgeben von innen ein sichtbasierter Animationsblock. Die UIView-Klasse deaktiviert Ebenenanimationen standardmäßig, aktiviert sie jedoch wieder in Animationsblöcken. Änderungen, die Sie außerhalb eines Animationsblocks vornehmen, werden nicht animiert.
Direkt unter dem Angebot umfasst die Dokumentation den folgenden Code Eintrag:
[UIView animateWithDuration:1.0 animations:^{
// Change the opacity implicitly.
myView.layer.opacity = 0.0;
// Change the position explicitly.
CABasicAnimation* theAnim = [CABasicAnimation animationWithKeyPath:@"position"];
theAnim.fromValue = [NSValue valueWithCGPoint:myView.layer.position];
theAnim.toValue = [NSValue valueWithCGPoint:myNewPosition];
theAnim.duration = 3.0;
[myView.layer addAnimation:theAnim forKey:@"AnimateFrame"];
}];
was bedeutet, dass beide impliziten und expliziten Animationen auf CALayer
s Unterstützung UIView
s innerhalb eines Animationsblock platziert werden müssen.
Allerdings habe ich festgestellt, dass dies offensichtlich unwahr ist. Insbesondere habe ich explizite Animationen mit Core-Animation-Klassen außerhalb eines UIView
Animationsblocks implementiert.
Habe ich diese Passage missverstanden oder ist sie veraltet oder etwas anderes?
Einige zusätzliche Anmerkungen:
Ich gehe davon aus, dass „die UIView Klasse von Standard-Layer-Animationen deaktiviert aber reaktiviert sie innerhalb Animation Blöcke“ bezieht sich auf die +[UIView setAnimationsEnabled:]
Methode. Wenn ich zu einem Computer zurückkomme, der das tun kann, überprüfe ich, ob +[UIView areAnimationsEnabled]
YES
oder NO
zurückgibt.
Sie sagen also, dass UIView * implizite * Animation auf ihren Backing-Layern deaktiviert (außer in 'UIView' Animationsblöcken), aber weiterhin explizite Animationen erlaubt? Wenn dies der Fall ist, unterscheidet sich dies von der Dokumentation, die besagt, dass * alle * CA-Aufrufe innerhalb eines Animationsblocks sein müssen. – ravron
Wenn das ist, was es dann sagt, ist es falsch/schlecht formuliert. Das ist absolut nicht wahr. –
@ravron Dieser Abschnitt befindet sich unter "So animieren Sie Layer-unterstützte Ansichten". Für mich war es offensichtlich, dass es sich um Layer handelt, die eine UIView unterstützen. –