animation uinavigationcontroller catransition

animation - iPhone-UINavigationController-animación personalizada con CATransaction



catransition (1)

He logrado algo similar, aunque no me molesté en moverlo a su propia función:

CATransition *transition = [CATransition animation]; transition.duration = 0.5; transition.type = kCATransitionMoveIn; transition.subtype = kCATransitionFromBottom; [self.navigationController.view.layer addAnimation:transition forKey:nil]; [self.navigationController popViewControllerAnimated:NO]

Puedes abstraerlo. Usando su código, se vería así:

- (void)popViewControllerMoveInFromTop { [CATransaction begin]; CATransition *transition; transition = [CATransition animation]; transition.type = kCATransitionMoveIn; transition.subtype = kCATransitionFromTop; transition.duration = 0.7; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; [self.view.layer addAnimation:transition forKey:nil]; [self popViewControllerAnimated:NO]; [CATransaction commit]; }

También puede crear una transición personalizada para pop usando las animaciones de UIView. Aquí está aplicando una animación a la vista que está a punto de desaparecer y luego apareciendo desde la pila de vistas:

[UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.75]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; [self.navigationController popViewControllerAnimated:NO]; [UIView commitAnimations];

Estoy intentando crear una categoría para UINavigationController para poder armar algunas animaciones personalizadas. Me encontré con esta pregunta y me ayudó a comenzar. He encontrado lo siguiente para una función de inserción:

- (void)pushViewControllerMoveInFromBottom:(UIViewController *)viewController { [CATransaction begin]; CATransition *transition; transition = [CATransition animation]; transition.type = kCATransitionMoveIn; transition.subtype = kCATransitionFromBottom; transition.duration = 0.7; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; [[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil]; [self pushViewController:viewController animated:YES]; [CATransaction commit]; }

No entiendo a qué vista / capa se accede a través de la llamada subvista. Entonces, si alguien puede ayudarme a entender eso, sería útil. Parece estar afectando a cualquier vista que esté por aparecer en la pantalla.

Pero mi pregunta principal es que estoy tratando de crear un pop que "deshaga" la función anterior. Para mayor claridad, digamos que tengo dos vistas, A y B. A es la primera vista que se muestra en la pantalla. La función anterior se moverá en B sin presionar A hacia afuera. Al igual que una vista modal lo haría. Pero la función de abajo desliza A hacia adentro sobre B, en lugar de deslizar B hacia arriba y dejar A en su lugar.

- (void)popViewControllerMoveInFromTop { [CATransaction begin]; CATransition *transition; transition = [CATransition animation]; transition.type = kCATransitionMoveIn; transition.subtype = kCATransitionFromTop; transition.duration = 0.7; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; [[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil]; [self popViewControllerAnimated:YES]; [CATransaction commit]; }

No quiero usar una vista modal y prefiero no usar bloques de animación personalizados para cambiar el marco de las vistas.