Estoy tratando de hacer una pantalla personalizada de UIView
en pantalla durante 5 segundos cuando se recibe una notificación remota.¿Cómo hacer animaciones "en serie" con GCD?
código como este:
//customView.alpha = 1.0 here
[UIView animateWithDuration:1 animations:^{
customView.alpha = 0.3;
}
completion:^(BOOL finished){
// remove customView from super view.
}];
problema y lo que necesito
Pero hay casos en los que un par de notificación puede llegar en corto intervalo de tiempo, en el que varios customView
puede animando al mismo tiempo y uno puede cubrir a los demás.
Quiero que estas animaciones se realicen una tras otra, para que no entren en conflicto.
Asumiendo pero falló
//(dispatch_queue_t)queue was created in other parts of the code
dispatch_sync(queue, ^{
[UIView animationWithDuration:animations:...];
});
Después de hacer la animación en la cola GCD, me dieron el mismo resultado que el código de origen utilicé, que no utilizó GCD. Las animaciones siguen siendo conflictivas.
Por cierto, oí que animaciones o tareas que implican la interfaz de usuario siempre se deben ejecutar en el hilo principal, pero en mi segundo código de la animación parecía hecho colado. ¿Por qué?
Tiene la idea similar a @Ducan. Gracias por tu codigo ¿Y crees que deberíamos bloquear 'self.numberOfTimesToRunAnimation'? – studyro
Sí. Al no definir la propiedad como "no atómica" y nunca acceder directamente a la variable (siempre utilizando la propiedad) el sistema bloqueará la variable para que dos hilos no lean/escriban al mismo tiempo. –
Muy agradable. Lo usé para controlar la IU segmentada de control. Al poner el 'selectedIndex' en la propiedad y establecerlo en' NSNotFound' al finalizar, no es necesario que deshabilite el control durante la animación. ¡Gracias! –