2009-10-12 4 views
12

bewegen ich den folgenden Code bin mit einem Etikett von einer Position zur anderen in x-Richtung am Ende desWie eine Ansicht oder Label in x-Richtung mit CABasicAnimation in iPhone

CABasicAnimation *theAnimation; 
    theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; 
    theAnimation.duration=1; 
    theAnimation.repeatCount=1; 
    theAnimation.autoreverses=NO; 
    theAnimation.fromValue=[NSNumber numberWithFloat:0]; 
    theAnimation.toValue=[NSNumber numberWithFloat:80]; 


    [lbl.layer addAnimation:theAnimation forKey:@"animateLayer"]; 

Aber in diesem Fall zu bewegen In der Animation verschiebt sich das Etikett wieder in seine ursprüngliche Position. So stellen Sie sicher, dass es an der Position bleibt, an der es bewegt wird.

Gibt es einen guten Weg, es ohne Timer zu tun und die Koordinaten selbst zu ändern.

Antwort

14

Nachdem die Animation abgeschlossen ist, wird sie entfernt. Deshalb schnappt es zurück. Fügen Sie das zu Ihrer Animation hinzu:

theAnimation.removedOnCompletion = NO; 
theAnimation.fillMode = kCAFillModeForwards; 

Dies verhindert, dass die Animation entfernt wird, und weist die Animation an, in ihrem endgültigen Zustand nach Abschluss zu bleiben.

+0

erstaunlich es funktioniert gut. – rkb

1

Es gibt 2 Dinge, die hier aktualisiert werden müssen. Die Präsentationsschicht und das Modell. CABasicAnimation ändert nur die Präsentationsschicht und aktualisiert das Modell nie. Wenn die Präsentationsschicht von der Animation beendet wird, verschwindet sie und Sie sehen die Ansicht mit den Werten aus dem Modell. Sie müssen das Modell nur mit dem neuen Wert aktualisieren, wenn die Animation fertig ist.

[layer setValue:toValue forKeyPath:keyPath]; 

haben einen Blick auf ein Dienstprogramm, das ich mit diesem genau zu helfen, schrieb HMBasicAnimation http://hellomihai.wordpress.com/2014/09/02/hmbasicanimation-utility/

Nutzung:

[HMBasicAnimation doAnimation:myView.layer // layer youre updating 
         toValue:myView.frame.size.width/2 // your value 
        duration:1.5 // duration 
       delaySeconds:1 // animation delay (good for chaining animations 
         keyPath:HMBasicAnimation_TRANSLATION_X]; // what you're changing, several available 
Verwandte Themen