sto applicando CABasicAnimation per la proprietà position di un livello che sta animando bene ma dopo l'animazione si completa il suo ritorno alla posizione originale come evitare ciò e per rendere l'immagine in posizione animata solo ?CABasicAnimazione non modifica la proprietà della posizione dopo il completamento dell'animazione
risposta
Ci sono diversi modi per risolvere questo problema. Il mio preferito è impostare l'oggetto alla fine dell'animazione e utilizzare fromValue anziché toValue per creare l'animazione. Puoi anche impostare sia fromValue che toValue per creare questo effetto. cioè
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
L'altro modo per farlo è quello di impostare se stessi come il delegato e implementare:
È necessario impostare la posizione finale. Se si utilizza solo l'animazione fromValue e toValue, si tornerà al punto iniziale originale. L'animazione usa una copia della vista/livello mentre "suona" e quindi l'animazione mostrerà la vista/il livello originale al termine.
Se non lo si imposta in modo esplicito, apparirà uno snap indietro, anche se la vista/livello non si è mai realmente spostata.
startPoint e endPoint sono CGPoint e myView è l'UIView animato.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = .3;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.toValue = [NSValue valueWithCGPoint:endPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[myView.layer addAnimation:animation forKey:@"position"];
myView.layer.position = endPoint; // Must set end position, otherwise it jumps back
Inoltre, non dimenticare di impostare ** removeOnCompletion ** property of animation su ** NO ** 'animation.removedOnCompletion = NO;' – krpec
Se guardate la documentazione per addAnimation: Forkey :, si dice 'In genere questo viene implicitamente richiamata'. In altre parole, non dovresti chiamarlo direttamente. Si sta effettivamente destinato a fare la seguente, invece, che è ancora più facile l'impostazione da e per i valori, è sufficiente impostare i valori direttamente sullo strato:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.duration = .3;
myLayer.actions = @{@"opacity": animation};
myLayer.opacity = 0;
Questo svanirà uno strato di opacità zero.
Non lo vedo nei documenti, potrebbe essere una cosa OSX solo? Sto guardando CALayer [qui] (https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ/instm/CALayer/addAnimation: Forkey :). La maggior parte delle esercitazioni di Apple include una chiamata a "addAnimation: forKey:" ad es. [Qui] (https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html). – bcattle
Per impostare l'oggetto al termine dell'animazione basta scrivere il codice come questo
#import <QuartzCore/QuartzCore.h>
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:easing];
animation.fillMode = kCAFillModeForwards; // This line will stop the animation at the end position of animation
animation.autoreverses = NO;
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
non funziona per me –
Si può solo impostare removedOnCompletion su NO se si vuole preservare il valore finale. E non dimenticare di impostare la modalità di riempimento.
animation.fillMode = kCAFillModeForwards; //The receiver remains visible in its final state when the animation is completed.
animation.removedOnCompletion = NO;
- 1. CABasicAnimazione - Impostazione della posizione del tratto iniziale
- 2. CABasicAnimazione modifica durata/velocità durante la rotazione
- 3. Android: Ripristino posizione animazione dopo il completamento
- 4. Modifica la posizione della cartella node_modules
- 5. come rilevare la modifica della posizione
- 6. ForEach loop che non modifica la proprietà della classe
- 7. Determinazione della modifica della posizione dell'elemento HTML
- 8. Pannello Griglia Extjs - Modifica proprietà enableColumnHide dopo il rendering
- 9. Modifica della posizione di TFS Build
- 10. CABasicAnimazione - Trasforma la scala in centro
- 11. Apertura e modifica della posizione della finestra
- 12. CABasicAnimazione non funzionante con UIImageView
- 13. Monitorare una modifica della proprietà
- 14. Frammento perso animazione della transizione dopo la modifica della configurazione
- 15. La modifica della posizione del database elimina lo schema proprietario
- 16. Instradamento angolare senza modifica della posizione
- 17. Modifica della posizione del mouse quando viene aggiunta la viewbox
- 18. Modifica posizione della barra delle azioni Android
- 19. Google effettua il completamento automatico - posizione e raggio non funzionanti
- 20. Modifica la posizione predefinita della directory home in Android Studio
- 21. Il completamento della scheda IPython non funziona
- 22. WPF UI non aggiornato sulla modifica della proprietà
- 23. Come ottenere la posizione del fotogramma UIView dopo la trasformazione?
- 24. Come si modifica la posizione del MessageBox?
- 25. ListBox non aggiorna dopo la proprietà passò
- 26. Modifica matshow xticklabel posizione dall'alto verso il basso della figura
- 27. Modifica della proprietà del file durante la copia
- 28. Il browser attende il completamento della chiamata ajax anche dopo la chiamata (jQuery)
- 29. Modifica della proprietà videoComposizione di AVPlayerItem (AVMutableVideoComposition) durante la riproduzione
- 30. La modifica della proprietà 'className' è estremamente lenta in IE7
Grande. funziona per me, grazie mille –
qui, qual è il valore di "easing" ?. – sathiamoorthy
Credo che se l'easing non è impostato precarichi su Linear, ma dovrebbe essere semplice aggiungerlo se stai cercando facilità in/out o facilità dentro/fuori. –