2009-02-11 10 views
8

Ich animiere die Rahmeneigenschaft eines UIView mit einem CAKeyframeAnimation für den CALayer der Ansicht und animiere die Eigenschaft "position". Ich möchte die Animation im aktuellen Zustand stoppen können, wenn der Benutzer auf den Bildschirm tippt, aber ich kann dies nicht tun.Haltevorgang wird ausgeführt CAKeyframeAnimation

Ich kann die Animation leicht genug anhalten, indem

[view.layer removeAnimationForKey:kFrameAnimationKey]; 

Das Problem Aufruf ist, dass weder der Rahmen Sicht nicht Schicht Position ist direkt durch die Animation aktualisiert. Wenn ich die position -Eigenschaft zum Zeitpunkt der Animation beginnt und wenn sie endet in

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished 

hat es sich nicht geändert.

Es scheint, dass Sie das explizit tun müssen, wenn die Animation stoppt. Aber wenn die Animation an einem beliebigen Punkt aufhört, wissen Sie nicht, wie weit sie weg ist. Es stellt sich also die Frage, wie die Animation die Positionseigenschaft der Ebene aktualisieren soll oder wie weit die Animation gegangen ist, wenn sie gestoppt wurde.

Antwort

21

Sie können dieses Anhalten der Animation erreichen, indem Sie die presentationLayer Ihrer animierenden UIView-Ebene aufnehmen und dann den Rahmen auf Ihre UIView anwenden, bevor Sie die Animation entfernen. Zum Beispiel:

Dies scheint das Einfrieren der UIView an der aktuellen animierten Position, die Sie suchen.

+0

Danke für die Antwort! Es scheint hier der Schlüssel zu sein, zu verstehen, was genau die Präsentationsschicht eines CALayers ist. Ich bin mir nicht sicher, ob sie das großartig erklären. Ich bin mir immer noch nicht sicher, was die Modellschicht ist. –

+0

Der Abschnitt "Core Animation Rendering Architecture" im "Core Animation Programming Guide" enthält ein schönes Diagramm dieses Konzepts. Im Grunde genommen ist der Modell-Layer das, auf dem Sie normalerweise Werte festlegen, und der Präsentations-Layer ist eine schreibgeschützte Kopie, die den momentanen Status des Layers widerspiegelt. –

Verwandte Themen