Animación de transición personalizada retraso desconocido entre animationControllerForPresentedController y animateTransition

Mi objective es hacer que la animation suave comience en el primer controller de vista y termine en el segundo controller de vista.

Estoy experimentando con la animation de transición usando un object que se ajusta a los protocolos UIViewControllerAnimatedTransitioning y UIViewControllerTransitioningDelegate . Configuré dos controlleres de vista (VC) en el guión gráfico y los conecté con segue (progtwig pnetworkingeterminado). También hice desenrollar el método segue en el primer VC y configuré un button para él en el segundo VC.

Tengo un extraño problema Mi object tiene methods

 func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { self.presenting = true NSLog("start") return self } func animateTransition(transitionContext: UIViewControllerContextTransitioning) { if presenting { NSLog("Animation Push") transitionPush(transitionContext) } else { NSLog("Animation Pop") transitionPop(transitionContext) } } 

Tengo dos methods diferentes para la animation desde el primer VC hasta el segundo y desde el segundo hasta el primer VC. Cuando activo segue tengo una demora muy extraña entre los animateTransition animationControllerForPresentedController y animateTransition . A veces puede ser alnetworkingedor de 1 segundo, y toda mi animation de transición debe ser de 1 segundo más este retraso inesperado es demasiado grande. Aquí hay un logging:

 2015-02-08 19:52:33.528 MyApp[1318:119598] start 2015-02-08 19:52:33.979 MyApp[1318:119598] Animation Push 

No sé por qué ocurre este retraso y si hay alguna forma de eliminarlo o networkingucirlo. Traté de verificar si este podría ser mi código, pero no encontré ninguna testing de ello. No dude en solicitar más información.

Yo tuve el mismo problema. Probablemente no active la animation desde el hilo principal (llamada presentViewController).

Esto resolvió el problema para mí (código Objective-C):

 dispatch_async(dispatch_get_main_queue(), ^{ [self presentViewController:viewControllerToPresent animated:YES completion:nil]; }); 

Encontré solución (solución) en discusión aquí , autor – tamas.zahola

 [self presentViewController:myViewController animated:YES completion:nil]; dispatch_async(dispatch_get_main_queue(), ^{}); // <--- this line