Sto tentando di creare uno schermo personalizzato per UIView
sullo schermo per 5 secondi quando arriva una notifica remota.Come si fa l'animazione 'seriale' con GCD?
codice come questo:
//customView.alpha = 1.0 here
[UIView animateWithDuration:1 animations:^{
customView.alpha = 0.3;
}
completion:^(BOOL finished){
// remove customView from super view.
}];
problema e ciò ho bisogno
Ma ci sei casi che un paio di notifica può arrivare in breve intervallo di tempo, in cui diversi customView
può animare allo stesso tempo e si può coprire gli altri.
Desidero che queste animazioni vengano eseguite una dopo l'altra, in modo che non siano in conflitto.
Assunta ma non è riuscito
//(dispatch_queue_t)queue was created in other parts of the code
dispatch_sync(queue, ^{
[UIView animationWithDuration:animations:...];
});
Dopo aver effettuato l'animazione nella coda GCD, ho ottenuto lo stesso risultato come il codice di origine che ho usato, che non ha utilizzato GCD. Le animazioni sono ancora in conflitto.
BTW, ho sentito che animazioni o attività che coinvolgono UI devono sempre essere eseguiti su thread principale, ma nel mio secondo codice dell'animazione sembrava fatto frullato. Perché?
Hai l'idea simile a @Ducan. Grazie per il tuo codice E pensi che dovremmo bloccare 'self.numberOfTimesToRunAnimation'? – studyro
Sì. Non definendo la proprietà come "non anatomica" e non accedendo mai direttamente alla variabile (usando sempre la proprietà) il sistema bloccherà la variabile per te in modo che due thread non leghino/scrivano allo stesso tempo. –
Molto bello. L'ho usato per controllare l'interfaccia utente segmentedControl. Inserendo 'selectedIndex' nella proprietà e impostandolo su' NSNotFound' al completamento, non devo disabilitare il controllo durante l'animazione. Grazie! –