unwind objective-c ios storyboard reverse segue

objective c - unwind - Inversión de Custom Segue con Storyboarding



swift unwind segue programmatically (3)

Tengo una animación de transición personalizada que se produce cuando se empuja un nuevo controlador de vista a la pila. Sin embargo, al mostrar el controlador de vista que se presentó con dicha transición personalizada, se produce la animación predeterminada del controlador de navegación (es decir, el controlador de vista actual se anima hacia la derecha mientras el controlador de vista principal se traduce en pantalla desde el borde izquierdo).

Así que mi pregunta es la siguiente: ¿hay alguna forma de escribir una animación de transición pop personalizada que ocurra al sacar un controlador de vista de la pila?

Editar (solución):

Terminé definiendo una transición personalizada similar a la respuesta seleccionada. En el guión gráfico, arrastré una transición personalizada desde el controlador de vista secundaria a su elemento primario, le di un identificador y el segmento inverso recién escrito como su clase. Sí, me doy cuenta de que es prácticamente idéntica a una transición modal. Los requisitos del cliente necesitaban esta locura, así que antes de que alguien comente, comprenda que sé que uno no debería tener que hacerlo en circunstancias normales.

- (void)perform { UIViewController *src = (UIViewController *)self.sourceViewController; UIViewController *dest = (UIViewController *)self.destinationViewController; [UIView animateWithDuration:0.3 animations:^{ CGRect f = src.view.frame; f.origin.y = f.size.height; src.view.frame = f; } completion:^(BOOL finished){ src.view.alpha = 0; [src.navigationController popViewControllerAnimated:NO]; }]; }


Sí. Aquí hay un ejemplo en el que aparezco en el nivel superior. Cuando creas el segue en Storyboard. Use select o ingrese la nueva nueva clase segue en el inspector de atributos.

// // FlipTopPop.h #import <UIKit/UIKit.h> @interface FlipTopPopToRoot : UIStoryboardSegue @end

y

// FlipTopPop.m #import "FlipTopPopToRoot.h" @implementation FlipTopPopToRoot - (void) perform { UIViewController *src = (UIViewController *) self.sourceViewController; [UIView transitionWithView:src.navigationController.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{ [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];; } completion:NULL]; } @end

Si desea mostrar solo un cambio de nivel, use este segue personalizado:

// PopSegue.h #import <UIKit/UIKit.h> @interface PopSegue : UIStoryboardSegue @end

y

// PopSegue.m #import "PopSegue.h" @implementation PopSegue - (void) perform { UIViewController *src = (UIViewController *) self.sourceViewController; [src.navigationController popViewControllerAnimated:YES]; }

@fin