2012-07-30 19 views
5

Estoy tratando de crear una transición personalizada para que el controlador de vista de destino se deslice hacia abajo desde la parte superior.El controlador de la vista de origen se oculta durante la transición personalizada

Escribí mi código según el ejemplo de the documentation.

El problema es que cuando se ejecuta la segue, el controlador de la vista de origen se pone negro, y luego ocurre la animación. ¿Cómo puedo evitar que el controlador de vista de fuente se vuelva negro?

(I bastante bueno en la implementación de la solución presentada en this answer pero la pantalla o bien se queda en negro después de la transición, o vuelve al controlador de vista de origen.)

Aquí está mi código:

-(void)perform{ 

    UIViewController *splashScreen = self.sourceViewController; 
    UIViewController *mainScreen = self.destinationViewController; 

    //Place the destination VC above the visible area   
    mainScreen.view.center = CGPointMake(mainScreen.view.center.x, 
              mainScreen.view.center.y-600); 

    //Animation to move the VC down into the visible area 
    [UIView animateWithDuration:1 
        animations:^{ 
         mainScreen.view.center = CGPointMake(mainScreen.view.center.x, [[UIScreen mainScreen] bounds].size.height/2); 
        } 
    ]; 

    [splashScreen presentModalViewController:mainScreen animated:NO]; 
} 
+0

La solución es increíblemente simple. Debe finalizar la animación ANTES de presentar el nuevo controlador de vista. No hay nada más para eso. – Fattie

Respuesta

3

La razón que su controlador de vista de origen parece estar oculto es que el controlador de vista de destino se presenta de inmediato.

Cuando escribe segmentos personalizados, no tiene ambas vistas disponibles al mismo tiempo. Usted podría

  • empuje controlador de vista, añadir la vista de origen al controlador de vista de destino y animar
  • añadir la vista de destino al controlador de vista del origen y la animación, a continuación, empuje controlador de vista
  • empuje a una de -Entre el controlador de vista, agregue ambas vistas, anima, presione al controlador de vista de destino.

En todos los casos anteriores en los que digo controladores de vista directa, en su lugar podría presentar la vista de los controladores de forma modal. De hecho, eso podría ser más adecuado para la solución de controlador de vista intermedia.

+0

Intenté la segunda opción que mencionas, y funciona bien. Aquí está el código: https://gist.github.com/3206340 ¿Pero cuál de las tres opciones que menciona es la más eficiente? – Eric

+0

No hay mucha diferencia en la eficiencia entre ellos. Debe elegir el que se sienta más limpio, más fácil de entender y mantener por usted. Para el código de producción, yo personalmente elegiría la tercera opción, ya que no interferirá con la jerarquía de vistas de la fuente o el destino durante la animación. Pero es una cuestión de gusto. –

+0

@ DavidRönnqvist Estoy intentando un segue pop en lugar de un segue de inserción, pero básicamente estoy siguiendo la opción 1, y mi vista fuente no está animando. ¿Podría echar un vistazo al código en [mi pregunta] (http://stackoverflow.com/questions/13036014/view-transition-doesnt-animate-during-custom-pop-segue)? – glorifiedHacker

Cuestiones relacionadas