2009-10-12 8 views
12

Sto usando il seguente codice per passare un'etichetta da una posizione all'altra in direzione xCome spostare una vista o l'etichetta in direzione X utilizzando 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"]; 

Ma in questo caso alla fine del l'animazione l'etichetta torna alla sua posizione originale. Come assicurarsi che rimanga nella posizione in cui viene spostato.

C'è un buon modo per farlo senza usare il timer e cambiare le coordinate per conto nostro.

risposta

14

Al termine dell'animazione, viene rimosso. Ecco perché torna indietro. Aggiungi questo alla tua animazione:

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

Ciò impedirà la rimozione dell'animazione e dice all'animazione di rimanere nel suo stato finale al completamento.

+0

stupefacente funziona benissimo. – rkb

1

Ci sono 2 articoli che devono essere aggiornati qui. Il livello di presentazione e il modello. CABasicAnimation modifica solo il livello di presentazione e non aggiorna mai il modello. Quindi, quando il livello di presentazione dall'animazione finisce, scompare e vedi la vista con i valori del modello. Devi solo aggiornare il modello con il nuovo valore quando l'animazione è terminata.

[layer setValue:toValue forKeyPath:keyPath]; 

uno sguardo ad un programma di utilità che ho scritto per dare una mano con esattamente a questo, HMBasicAnimation http://hellomihai.wordpress.com/2014/09/02/hmbasicanimation-utility/

utilizzo:

[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 
Problemi correlati