reloj de manzana: animation de imágenes lentas por primera vez

Estoy construyendo una pequeña aplicación para reloj de manzana. Tengo un grupo y una label dentro de él. Lo que trato de hacer es:

  • animar image de background del grupo
  • Se desvanece la label después de que termina la animation de la image.

Mi código se ve esencialmente así:

group.setBackgroundImageNamed("show_back-"); group.startAnimatingWithImagesInRange(NSMakeRange(0, 39), duration: 1.5, repeatCount: 1); let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC))) dispatch_after(delayTime, dispatch_get_main_queue()) { () -> Void in self.animateWithDuration(1) { () -> Void in self.label.setAlpha(1) }; }; 

El problema es que la primera vez que se activa esta secuencia, la animation de la image parece ejecutarse más lento que 1.5 segundos, porque la label comienza a desvanecerse antes de que las imágenes dejen de cambiar. Si esto se dispara de nuevo mientras la aplicación se está ejecutando, todo funciona como se esperaba. Supongo que tiene algo que ver con la precarga de imágenes o algo así.

¿Cómo puedo hacer que funcione constantemente? No pude encontrar ningún tipo de callback en la animation de secuencia de imágenes para finalizar suscribirse.

EDITAR Otro problema que noté: tengo otro caso cuando bg está animado desde un bloque dispatch_after, y cuando salgo de la aplicación tocando la corona y return tocando dos veces, el bloque dispatch_after no se dispara, o el background la animation no se muestra correctamente la primera vez que se invoca (creo que el segundo, porque intenté agregar un punto de interrupción en el bloque de envío y se activó cada vez que probé). Estoy ejecutando watchOS2, ¿tal vez está relacionado con el estado beta en el que se encuentra el sistema operativo actualmente?

Me encontré con el mismo problema que tú.

Esto sucede porque la primera vez que lo pruebes, el reloj requiere time para cargar las imágenes. También Apple no nos da ningún método de "carga previa", así que se me ocurrió un poco de trabajo: cuando se muestre mi controller:

 func willActivate() 

Toco la secuencia de animation una vez en una banda de rodadura de background, de esta manera cuando mi usuario hace clic en ella, las imágenes ya están cargadas.

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { [weak self] in if let uSelf = self { uSelf.statusAnimationImage.setImageNamed("my image name") uSelf.statusAnimationImage.startAnimatingWithImagesInRange(NSMakeRange(0, 359), duration: 0.5, repeatCount: 1) } } 

Esa fue la mejor manera que encontré para resolver este problema y funciona para mí.

trata de hacerlo

  group.setBackgroundImageNamed("show_back-"); let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC))) dispatch_after(delayTime, dispatch_get_main_queue()) { () -> Void in self.animateWithDuration(1) { () -> Void in group.startAnimatingWithImagesInRange(NSMakeRange(0, 39), duration: 1.5, repeatCount: 1); self.label.setAlpha(1) }; }; 

No estoy exactamente seguro de lo que estás haciendo, pero también bash hacer animateWithDuration (0) o (1.5)