2012-01-25 23 views
6

Estoy tratando de implementar una transición flip estilo iBooks como un guión gráfico. La segue debería presionar resp. abre el destinationViewController en/desde la pila UINavigationControllers.Custom Segue Empujar/Saltar UIViewControllers

Puedo presionar viewcontrollers en mi método segues perform pero no puedo abrir. Cuando selecciono el controlador justo después de crear mi animación flip la animación no se ejecuta y su devolución de llamada - que debe realizar [[UIApplication sharedApplication] endIgnoringInteractionEvents] nunca se llama y mi aplicación resulta muerta.

Así que traté de empujar/pop en el método delegado animationDidStop:anim:flag pero nunca se llama con el indicador establecido en verdadero.

Supongo que la transición se desasigna antes de que se llame al método delegado. ¿Qué más podría hacer?

+0

Debe utilizar iOS5 si está utilizando guiones gráficos. ¿Por qué no usar 'UIPageViewController'? Implementa todo el comportamiento estándar de volteo de página que ve iBooks. –

+1

No estoy hablando de pagecurl, sino del cambio de la biblioteca ibooks a la tienda y al revés. – cschuff

+0

Básicamente, desea dos controles de vista que aparezcan "espalda con espalda", por así decirlo, de modo que pueda alternar entre ambos a voluntad, dentro del mismo espacio, frente a estar en una pila con uno que tenga prioridad sobre el otro, ¿ya? No publicaré esto como respuesta hasta que esté 100% seguro, pero me pregunto si sería mejor proporcionar la ilusión de esto en su lugar (así que digamos que tienes una vista de tabla y una vista de mapa. Haz uno primario, pasar al secundario con un giro, y hacer que el giro inverso sea el "regreso" per se. Tendremos que probar esto ...) –

Respuesta

5

Perdóneme si no entiendo bien esta pregunta, pero parece que lo único que quiere es hacer un desplazamiento horizontal básico hacia adelante y atrás entre dos controladores de visualización. E incluso si ya se dio cuenta de esto, tal vez ayudará a cualquier otra persona que tenga la misma pregunta.

(1) En su guión gráfico (que tiene ViewController A & B) cree un Segue modal de A a B. Déle un identificador (showViewControllerB) y elija Transición: Voltear horizontalmente.

creamos el protocolo y los delegados:

(2a) En ViewControllerB.h Agregar arriba @interface:

@class ViewControllerB; 

@protocol ViewControllerBDelegate 
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller; 
@end 

(2b) Añadir el delegado como una propiedad:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate; 

(3a) En ViewControllerB.m sintetizar:

@synthesize delegate; 

(3b) y delegado en el método para voltear hacia atrás:

- (IBAction)flipBack:(id)sender 
{ 
    [self.delegate viewControllerBDidFinish:self]; 
} 

(4) En ViewControllerA.h añadir en la parte superior #import "ViewControllerB.h" y en el extremo de @interface <ViewControllerBDelegate>

(5a) en ViewControllerA.m añadir el método para conformar el protocolo:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

(5b) a continuación, establecerlo como el delegado en prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) { 
     [[segue destinationViewController] setDelegate:self]; 
    } 
} 

Espero que esto responda a su pregunta. Si no entendí bien, házmelo saber.

0

Su pregunta es un poco confusa como mezclar pop, push, flip y backflip. No estoy seguro de si puedo responder tu pregunta, pero puedo decir lo que hice.

Si presiono un viewController en la pila del controlador de navegación y configuro el estilo Segue Storyboard en Push, se insertará en la vista de derecha a izquierda. Aparece un botón Atrás y muestra el título de la presentación del controlador de visualización en él.

Si configuro el estilo Segue Storyboard en Modal, puedo establecer la Transición para Voltear Horizontal (lo que parece ser lo que desea). Pero luego no aparecerá el botón Atrás. En el presentedViewController la desestimación de la vista con:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

Se le dará la vuelta al segundo punto de vista de vuelta con un giro a la derecha.

Pero esta es la solución sucia y no es recomendada por Apple.

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

Lucas Dubert que dio un ejemplo de cómo implementar el delegado.