2010-12-30 12 views
1

Ich habe eine Bezier-Kurve und animiere ein Objekt, das sich mit CAKeyFrameAnimation entlang bewegt. Aber, das Objekt stoppt an irgendeinem Punkt in der Kurve bei der Erkennung eines Benutzer-Tap. Wenn Sie dann auf eine Schaltfläche klicken, um die Bewegung fortzusetzen, sollte das Objekt den verbleibenden Pfad bis zum Ende durchlaufen. Wie mache ich das?BezierPath-Animation

Wenn ich den Pfad zum CAKeyFrameAnimation-Objekt hinzufüge, wird das Objekt beim Klicken auf die Fortsetzen-Schaltfläche vom Anfang bis zum Ende des Pfads verschoben. Nicht von dem Punkt an, als es aufhörte. Ich möchte, dass es sich nur von dem Punkt aus fortsetzt, an dem es aufgehört hat und nicht wieder von vorne beginnt. Irgendeine Möglichkeit, es entlang des Weges von der Stelle zu animieren, an der es anhält?

Antwort

3

Das gesamte Timing der Kernanimation ist im CAMediaTiming Protokoll implementiert. Eine seiner Eigenschaften ist speed, die Animationszeiten für eine Ebene relativ zum Zeitbereich der übergeordneten Ebene definiert. Wenn Sie die Eigenschaft speed auf 0.0 setzen, wird die Animation effektiv angehalten.

Sie müssen ein wenig Zeit aufräumen, um sicherzustellen, dass die Animation ordnungsgemäß beendet wird, sobald Sie es neu starten. Technical Q&A QA1673 in der Dokumentation hat den folgenden Beispielcode, der für Sie arbeiten sollte:

-(void)pauseLayer:(CALayer*)layer 
{ 
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
    layer.speed = 0.0; 
    layer.timeOffset = pausedTime; 
} 

-(void)resumeLayer:(CAlayer*)layer 
{ 
    CFTimeInterval pausedTime = [layer timeOffset]; 
    layer.speed = 1.0; 
    layer.timeOffset = 0.0; 
    layer.beginTime = 0.0; 
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 
    layer.beginTime = timeSincePause; 
}