Wiederherstellen der Animation an der Stelle, an der sie abgebrochen wurde, wenn die App vom Hintergrund aus fortgesetzt wird

Habe ich eine endlos Schleife CABasicAnimation einer sich wiederholenden Bildelementen aus meiner Sicht:

a = [CABasicAnimation animationWithKeyPath:@"position"];
a.timingFunction = [CAMediaTimingFunction 
                      functionWithName:kCAMediaTimingFunctionLinear];
a.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
a.toValue = [NSValue valueWithCGPoint:CGPointMake(image.size.width, 0)];
a.repeatCount = HUGE_VALF;
a.duration = 15.0;
[a retain];

Ich habe versucht, die "anhalten und fortsetzen" layer animation wie beschrieben in Technische Q&A QA1673.

Wenn die app tritt in den hintergrund, die animation wird aus der Ebene entfernt.
Zum Ausgleich höre ich UIApplicationDidEnterBackgroundNotification - und call - stopAnimation und in Reaktion auf UIApplicationWillEnterForegroundNotification nennen startAnimation.

- (void)startAnimation 
{
    if ([[self.layer animationKeys] count] == 0)
        [self.layer addAnimation:a forKey:@"position"];

    CFTimeInterval pausedTime = [self.layer timeOffset];
    self.layer.speed = 1.0;
    self.layer.timeOffset = 0.0;
    self.layer.beginTime = 0.0;
    CFTimeInterval timeSincePause = 
      [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    self.layer.beginTime = timeSincePause;
}

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

Das problem ist, dass es fängt wieder am Anfang und es ist hässlich Sprung von der letzten position, wie gesehen, auf app snapshot das system hat bei der Anwendung hat Sie die EINGABETASTE hintergrund zurück an den Anfang der Schleife animation.

Ich kann nicht herausfinden, wie man es zu Beginn an letzter Stelle, wenn ich wieder zu-fügen Sie die animation. Ehrlich gesagt, ich verstehe einfach nicht, wie dieser code aus QA1673 funktioniert: resumeLayer es setzt die Ebene.beginTime zweimal, das scheint überflüssig. Aber wenn ich schon entfernt, den ersten Satz zu null, es nicht wieder die animation, wo er unterbrochen wurde. Getestet wurde dies mit einfachen tap-gesten-Erkennung, das hat toggle-animation - das ist nicht unbedingt in Bezug auf meine Probleme mit dem wiederherstellen aus dem hintergrund.

Welchem Zustand sollte ich mich erinnern, bevor die animation wird entfernt und wie kann ich wieder die animation aus, dass der Staat, wenn ich wieder später hinzufügen?

InformationsquelleAutor der Frage Palimondo | 2011-09-27

Schreibe einen Kommentar