2012-05-11 1208 views
7

Sí, ya he buscado una respuesta. Ninguna de las soluciones funciona, excepto una que no da la opción para una transición de desvanecimiento, solo flip o curl.popViewControllerAnimated: animación de transición personalizada?

De esta manera:

methodname 
    configure animation 
    [self.navigationController popViewControllerAnimated:NO]; 

No importa qué tipo de configuración de animación de transición que lo intente, nada es visiblemente diferente de la única en el menú emergente típica de una sola línea. Si lo cambio a …Animated:YES];, obtengo la animación pop estándar, tal vez con algo raro que ocurre a partir de las configuraciones rotas.

Así que mi pregunta es esta: ¿Cómo puedo hacer un pop con, si no es CrossDissolve, entonces al menos algo que se ve igual? ¿Es eso posible con un controlador de navegación?

El uso de vistas modales tendría la animación predeterminada que quiero, y podría administrar la pila de vista con la suficiente facilidad, pero no quiero hacer eso.

Respuesta

23

Para este tipo de transición, realmente recomendaría un controlador de vista modal, esa es la forma en que se diseñó el sistema.

Pero si insistes en usar el controlador de navegación, hay una manera, aunque algo desagradable.

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

CATransition *transition = [CATransition animation]; 
[transition setType:kCATransitionFade]; 
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"]; 

[self.navigationController popViewControllerAnimated:YES]; 
[CATransaction commit]; 

El CATransaction deshabilita todas las animaciones estándar. El CATransition agrega una transición de fundido a la capa del controlador de navegación cuando se intercambian las vistas (en este caso eliminando la vista del controlador de visualización que se muestra).

+2

absolutamente perfecto. – Thromordyn

+1

En iOS 7 estoy descubriendo que necesito pasar NO a popViewControllerAnimated en lugar de YES, pero de lo contrario, esto funciona muy bien. – EricS

2

En iOS 7 anterior, es posible que desee ver en UIViewControllerAnimatedTransitioning para los controladores de vista presentados, o UINavigationControllerDelegate método:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC 

tengo algo de sample code from another question para obtener más información. La respuesta de

0

Joris Kluivers en Swift 3:

CATransaction.begin() 
CATransaction.setDisableActions(true) 

let animation = CATransition() 
animation.type = kCATransitionFade 
self.navigationController?.view.layer.add(animation, forKey: "someAnimation") 
_ = self.navigationController?.popViewController(animated: false) 

CATransaction.commit() 
Cuestiones relacionadas