2011-06-10 13 views
8

¿Es posible implementar una transición suave cuando se carga la aplicación, desde la imagen de inicio hasta la primera vista?Suave transición desde la imagen de inicio a la vista principal

El comportamiento predeterminado es activar/desactivar, con un cambio inmediato: aparece la imagen de inicio, luego desaparece instantáneamente para permitir que el controlador de vista principal tenga lugar. Me gustaría implementar algo de desvanecimiento o acercamiento o alejamiento.

¿Esto es posible?

¡Gracias!

Respuesta

15

No hay soporte de marco, pero puede obtener ese resultado si lo hace usted mismo, de forma manual. Dependiendo de cuál sea su imagen de lanzamiento, y cómo se ve su UI, puede hacerlo de diferentes maneras, pero básicamente: haga que su primer controlador de visualización se cargue y muestre su imagen predeterminada.png en una vista de imagen cuando se carga. Luego, anima un fundido de esa imagen para revelar tu UI real.

+0

parece ser una solución limpia y sencilla! – marzapower

2

Estás de enhorabuena. Acabo de hacer esto hace unos minutos. Necesitas una pantalla de presentación. Una imagen en su vista que es exactamente la misma que su imagen predeterminada que carga el dispositivo. Luego, en su aplicación tiene que despedir con una animación de fundido llamada de la función viewDidAppear

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self performSelector:@selector(killSplashScreen) withObject:nil afterDelay:1.0]; 

} 

- (void)killSplashScreen { 
    [UIView animateWithDuration:0.5 animations:^{splashScreen.alpha = 0.0;} completion:NULL]; 
} 
0

A menudo usamos algo llamado "splashView" para hacer esto. Fue escrito por Shannon Applecline y está disponible bajo la licencia CC. Tendrás que buscar en Google para encontrarlo.

// 
// splashView.h 
// version 1.1 
// 
// Created by Shannon Appelcline on 5/22/09. 
// Copyright 2009 Skotos Tech Inc. 
// 
// Licensed Under Creative Commons Attribution 3.0: 
// http://creativecommons.org/licenses/by/3.0/ 
// You may freely use this class, provided that you maintain these attribute comments 
// 
// Visit our iPhone blog: http://iphoneinaction.manning.com 
// 
7

Respuesta modificada de Dancreek para hacerlo todo en la aplicación AppDelegate: didFinishLaunchingWithOptions. Me gusta porque el código solo se ejecuta al inicio de la aplicación, y no está contaminando ninguno de los controladores de vista.

Es muy simple:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // set up your root view and stuff.... 

    //.....(do whatever else you need to do)... 

    // show the main window, overlay with splash screen + alpha dissolve... 

     UIImageView *splashScreen = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]]; 
    [self.window addSubview:splashScreen];   
    [self.window makeKeyAndVisible]; 

    [UIView animateWithDuration:0.3 animations:^{splashScreen.alpha = 0.0;} 
        completion:(void (^)(BOOL)) ^{ 
          [splashScreen removeFromSuperview]; 
        } 
    ]; 
} 
+1

Tuve que cambiar su línea addSubview a esto: [self.window addSubview: splashScreen]; pero funcionó muy bien – codefinger

+0

@joekutner Sí, en retrospectiva, es una solución más general para agregar el splash directamente a la ventana. Eso siempre funcionará. Lo que hice funcionó para mí, pero depende de la configuración de vista inicial. Puse tu solución en la respuesta, es mejor;) – n13

+0

Mejor aún, crea una ventana de UI separada solo para tu vista de imagen de bienvenida, y establece su nivel de ventana por encima de la ventana principal. Esto asegura que la imagen permanecerá en la parte superior, incluso si otras partes de su código de inicialización agregan subvistas adicionales a la ventana principal más adelante. –

Cuestiones relacionadas