Sto lavorando al codice per una vista vassoio espandibile che utilizza UIDynamicAnimator per ottenere una bella animazione di espansione/contratto.UIDynamicAnimator rifiuta di raggiungere l'equilibrio quando è attivo un UIGravityBehavior
Per ottenere un'accelerazione realistica, utilizzo UIGravityBehavior
per far cadere il vassoio, finché la "scheda" del vassoio non tocca la parte inferiore dello schermo.
Questo funziona bene, ma anche se tutti gli elementi nella scena si sono fermati, UIDynamicAnimatorDelegate dynamicAnimatorDidPause:
non viene mai chiamato. Ciò significa che l'animatore continua a utilizzare i cicli della CPU per animare la scena (il delegato è impostato e viene attivato per UIDynamicAnimatorDelegate dynamicAnimatorDidPause:
).
Ho provato a rimuovere lo UIGravityBehavior
dalla scena, causando effettivamente l'arresto dell'animatore alla fine. Non riesco a tempo a rimediare al comportamento gravitazionale, dato che ho bisogno di rimuoverlo dalla scena una volta che tutto ha smesso di muoversi.
Capisco che la forza di gravità è una forza costante, ma ho sempre pensato che avrebbe fermato l'animatore una volta che tutto ha 0 velocità e 0 accelerazione.
Questa ultima ipotesi è falsa?
Chiunque abbia problemi simili?
Per chiunque stia leggendo questo: potrei aver trovato la soluzione. Non l'ho ancora provato, ma mi sono imbattuto nello stesso problema in una situazione diversa: stavo usando UIDynamicAnimator updateItemUsingCurrentState all'interno di un blocco di animazione. Questo non era il caso nella mia classe TrayView, ma ho pensato che questa realizzazione potrebbe aiutare le persone in futuro. Se avrò tempo cercherò di ispezionare il mio utilizzo di updateItemUsingCurrentState e vedere se riesco a impedire che il problema si verifichi nella mia classe TrayView. – Nailer