2012-09-15 8 views
9

È in corso un'animazione UIView che ho bisogno di cancellare nella mia app iOS. Ho provato questo:Annullamento di UIView Animation - self.view.layer removeAllAnimations non funzionante

[self.view.layer removeAllAnimations]; 

Ma non ha funzionato. L'animazione continuò. Qui è il mio codice di animazione:

[UIView animateWithDuration:1.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
recognizer.view.transform = CGAffineTransformTranslate(recognizer.view.transform, translation.x, translation.y); 
} completion:^(BOOL finished) { 

      NSLog(@"completed animation, now do whatever"); 
     }]; 

Qualcuno ha qualche idea sul perché non funziona?

+2

si aggiunge che l'animazione a Recognizer vista, quindi, si dovrà rimuovere dal livello di quello stesso punto di vista. Quindi invece di [self.view.layer removeAllAnimations] potresti voler [recognizer.view.layer removeAllAnimations]. – Till

+1

Ciao. Grazie - sta succedendo qualcosa, ma questo introduce un altro problema. Porta l'animazione alla fine all'istante fermandolo lì. Voglio che si fermi nella sua posizione attuale - la posizione in cui si trova quando voglio interrompere l'animazione - non saltare alla fine. Questo può essere fatto in questo modo? –

+2

Controlla 'recognizer.view.layer.presentationLayer'. Avrà la trasformazione centrale, ma lo imposterà al livello corrente: 'recognizer.view.layer.transform = recognizer.view.layer.presentationLayer.transform;' ... Potrebbe essere necessario più lavoro. – Mazyod

risposta

10

Si sta aggiungendo quell'animazione alla vista del riconoscitore, quindi sarà necessario rimuoverla dal livello della stessa vista.

Così, invece di

[self.view.layer removeAllAnimations]; 

si potrebbe voler

[recognizer.view.layer removeAllAnimations]; 

E per mantenere lo stato attuale della trasformazione, del recupero uno dal livello di presentazione. Il livello di presentazione è quello che riflette effettivamente i cambiamenti durante l'animazione.

recognizer.view.layer.transform = recognizer.view.layer.presentationLayer.transform; 
+1

Grazie per il primo 2. Problema con l'ultima sezione per mantenere lo stato . Ottieni questo errore: "Proprietà 'transform' non trovata su oggetto di tipo 'id'" –

3

Ok, ho appena capito. Modificato il componente beng animato dal riconoscitore di gesti in cima alla vista dell'immagine alla vista dell'immagine stessa. Ora, appena prima del codice per interrompere l'animazione, ho:

truckView.frame = [[trackView.layer presentationLayer] frame]; 
[truckView.layer removeAllAnimations]; 

Quindi questo è il modo per farlo. Grazie per l'aiuto che mi ha portato a questa risposta,

Sam

+0

Sto usando questo, ma comincio a pensare perché ottiene il frame prima di rimuovere tutte le animazioni, l'animazione effettivamente continua un po 'e il frame che era impostato è obsoleto – MobileMon