2013-04-22 5 views
5

Ich animiere einen CALayer mit CABasicAnimation und erwarte, dass der Layer nach Abschluss der Animation in Position bleibt. Fast alle Lösungen zeigen die folgenden, dieKorrekter Weg, um eine verschwindende Schicht in CABasicAnimation zu verhindern?

animation.removedOnCompletion = NO; 
animation.fillMode = kCAFillModeForwards; 

jedoch die 2010 WWDC Lautsprecher in der Core Animation in der Praxis Teil 1 funktioniert gut (~ 38-41mins) sagt, dass die meisten Lösungen auf die verschwindenden Schicht zu finden sind " Schein“und der richtige Weg, um eine Schicht zu animieren ist in etwa die folgenden

animation.fromValue = [NSNumber numberWithFloat:layer.position.y]; 
layer.position = CGPointMake(layer.position.y, endPoint); 
animation.toValue = [NSNumber numberWithFloat:endPoint]; 

der angegebene Grund ist, dass die removedOnCompletion/fillMode Lösung nur die Präsentationsschicht gefriert, und die eigentliche Schicht hat immer noch seine ursprüngliche Position gesetzt.

Bitte korrigieren Sie mich, wenn ich den Lautsprecher falsch interpretiert habe.

Wenn ich ihn richtig verstanden habe, wann ist das wichtig?

Danke, Steve

Antwort

2

Es hängt davon ab, was Sie tun möchten ... Ihre eigene Erklärung scheint ziemlich klar.

Wenn Sie nur Eigenschaften animieren, ohne den tatsächlichen Wert zu ändern, dann unterscheidet sich "was Sie sehen" tatsächlich von "was ist". Meistens willst du das nicht. (Und wenn Sie UIView Animationen oder CALayer implizite Animationen verwenden, werden "was ist" und "was Sie sehen" synchronisiert, was mit der direkten Setter-Syntax übereinstimmt).

Aber in einigen Fällen kann es nützlich sein, den tatsächlichen Wert zu erhalten und vorübergehend etwas anderes auf dem Bildschirm anzuzeigen ... solange Sie wissen, was Sie tun!

+0

Danke für die Antwort - Entschuldigung meine hier war ein bisschen langsam. Ich bin vielleicht nie auf die Notwendigkeit gestoßen, etwas mehr mit der Präsentationsschicht oder der tatsächlichen Ebene zu tun, weshalb ich mit den beiden Methoden zu kämpfen hatte. Danke noch einmal. Steve – Steve

1

Sie verstehen es richtig.

Dies bedeutet, dass wenn Sie eine Animation auf einer Ebene erstellen eine "spezielle" Ebene namens "Präsentationsebene" erstellt wird und die Animation tatsächlich darauf stattfand, aber die tatsächliche Ebene wird nicht geändert. In der Tat müssen Sie die Eigenschaft auf die Ebene am Ende der Animation setzen, um die Ebene mit dem endgültigen Animationsstatus zu "synchronisieren".