2016-05-12 16 views
0

ich eine UIScrollView auf diese Weise animiert haben:Wie CAKeyframeAnimation in UIScrollView.layer.addAnimation zu stoppen - removeAnimationForKey und removeAllAnimations nichts tun

let anim = CAKeyframeAnimation() 
anim.keyPath = "bounds.origin.x" 
anim.values = self.animValues 
anim.keyTimes = self.animKeyTimes 
anim.duration = self.animDuration 
anim.additive = true 
myScrollView.layer.addAnimation(anim, forKey: "move") 

Dann, wenn der Benutzer ein tippt Abbrechen Ich habe versucht, dieses:

myScrollView.layer.removeAnimationForKey("move") 
myScrollView.layer.removeAllAnimations() 

keiner funktioniert. Ich habe auch versucht anim.duration = 0.0 Einstellung. Das hatte keine Wirkung. Ich kann nichts mit myScrollView.layer.presentationLayer() tun, weil presentationLayer()nil ist.

Die Animationen müssen nicht pausiert werden. Sie können vollständig angehalten und verworfen werden. Sie werden nie neu gestartet.

Diese Animationen können 30 Sekunden oder länger sein. Den Benutzer dazu zu zwingen, bis zum Ende zu warten, ist UX/UI nicht gut.

Jede Hilfe würde sehr geschätzt werden.

Danke,

David

+0

machst du irgendetwas im Abschluss-Handler der Animation? bedeutet, wenn die Animation komplett von vorne beginnt? – Lion

+0

Lion, Ich habe keinen Abschluss-Handler. Ich möchte nicht noch einmal anfangen. Die Animation ist pünktlich mit einem anderen Prozess, der die gleiche Zeit dauert. Ich muss das Ende von beiden nicht erkennen. Danke, David –

Antwort

0

Ich musste meine Projektdatei für ein anderes Problem neu erstellen, und als ich das wieder versuchte, funktionierte es so, wie es soll!

Das ist mindestens das dritte Mal, dass ich die Projektdatei für diese App neu erstellen musste. Ich muss etwas richtig machen!

0

können Sie versuchen, Animationsgeschwindigkeit auf Null

myScrollView.layer.speed = 0.0 

Versuchen anim.keyPath = "position.x" statt "bounds.origin.x" -Einstellung. Das funktionierte für mich mit layer.removeAllAnimations()

+0

stefos, Aber ich möchte es tatsächlich stoppen und es weggehen lassen. Zum Beispiel, wenn ich eine 30-Sekunden-Animation habe und der Benutzer nach 10 Sekunden auf Abbrechen klickt. Ich möchte, dass sie von Anfang an starten und starten können. Ich möchte nicht, dass sie weitermachen. –

+0

Und "position.x" stoppt nicht mehr als "bounds.origin.x". –