animation splash-screen ios7 fadeout

animation - La imagen de inicio de iOS 7(pantalla de inicio) se desvanece



splash-screen ios7 (6)

En iOS 7, las imágenes de lanzamiento se desvanecen en lugar de desaparecer inmediatamente cuando se carga la aplicación.

¿Hay alguna configuración para evitar que esta imagen de lanzamiento se desvanezca? Necesito que desaparezca inmediatamente como en iOS 6 y anteriores.

Editar para respuestas:

Sí, es posible agregar la imagen splash como UIImageView a la ventana superior y ocultarla después de que se complete la animación de fundido de destello. Pero esto causa un retraso de 0.4 segundos que estoy tratando de evitar.


En iOS 7, la pantalla de presentación cambia de color desde la imagen de bienvenida a su primera UIView. Si ese UIView parece idéntico a la pantalla de inicio, no verá el fundido. El problema es que la vista inicial de Cocos2D es puramente negra.

Desafortunadamente, la única forma que encontré para resolver esto fue agregar un UIImageView idéntico a la imagen splash por un segundo, luego eliminarlo una vez que Cocos2D comenzó a dibujar.

En CCDirectorIOS (o su subclase):

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_WIDESCREEN (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height > 567.0f) static const NSInteger tempSplashViewTag = 87624; - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSString *spriteName = IS_IPAD ? @"Default-Landscape" : IS_WIDESCREEN ? @"Default-568h" : @"Default"; UIImageView *splashView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:spriteName]]; splashView.tag = tempSplashViewTag; [self.view addSubview:splashView]; [self startAnimation]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ UIView *splashView = [self.view viewWithTag:tempSplashViewTag]; [splashView removeFromSuperview]; }); }


Logré hacer eso en el AppController. Simplemente coloque este código justo después de la creación del glView

UIImage* image = [UIImage imageNamed:[self getLaunchImageName]]; if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) { float screenScale = [[UIScreen mainScreen] scale]; if (screenScale > 1.) image = [UIImage imageWithCGImage:image.CGImage scale:screenScale orientation:image.imageOrientation]; } UIImageView *splashView = [[UIImageView alloc] initWithImage:image]; [viewController.view addSubview:splashView]; [splashView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.1f];

Es fácil. Acaba de obtener la imagen de lanzamiento y hacerla desaparecer después de un retraso. Necesitará el código getLaunchImage (basado en este comentario , no probado con iPhone 6 ni 6 plus)

-(NSString*)getLaunchImageName { NSArray* images= @[@"LaunchImage.png", @"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]", @"LaunchImage-700-Portrait@2x~ipad.png", @"LaunchImage-Portrait@2x~ipad.png", @"LaunchImage-700-Portrait~ipad.png", @"LaunchImage-Portrait~ipad.png", @"LaunchImage-Landscape@2x~ipad.png", @"LaunchImage-700-Landscape@2x~ipad.png", @"LaunchImage-Landscape~ipad.png", @"LaunchImage-700-Landscape~ipad.png", @"[email protected]", @"[email protected]", @"[email protected]", ]; UIImage *splashImage; if ([self isDeviceiPhone]) { if ([self isDeviceiPhone4] && [self isDeviceRetina]) { splashImage = [UIImage imageNamed:images[1]]; if (splashImage.size.width!=0) return images[1]; else return images[2]; } else if ([self isDeviceiPhone5]) { splashImage = [UIImage imageNamed:images[1]]; if (splashImage.size.width!=0) return images[3]; else return images[4]; } else if ([self isDeviceiPhone6]) { splashImage = [UIImage imageNamed:images[1]]; if (splashImage.size.width!=0) return images[13]; else return images[14]; } else return images[0]; //Non-retina iPhone } else if ([[UIDevice currentDevice] orientation]==UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)//iPad Portrait { if ([self isDeviceRetina]) { splashImage = [UIImage imageNamed:images[5]]; if (splashImage.size.width!=0) return images[5]; else return images[6]; } else { splashImage = [UIImage imageNamed:images[7]]; if (splashImage.size.width!=0) return images[7]; else return images[8]; } } else { if ([self isDeviceRetina]) { splashImage = [UIImage imageNamed:images[9]]; if (splashImage.size.width!=0) return images[9]; else return images[10]; } else { splashImage = [UIImage imageNamed:images[11]]; if (splashImage.size.width!=0) return images[11]; else return images[12]; } } } -(BOOL)isDeviceiPhone { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { return TRUE; } return FALSE; } -(BOOL)isDeviceiPhone4 { if ([[UIScreen mainScreen] bounds].size.height==480) return TRUE; return FALSE; } -(BOOL)isDeviceRetina { if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0)) // Retina display { return TRUE; } else // non-Retina display { return FALSE; } } -(BOOL)isDeviceiPhone5 { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height==568) { return TRUE; } return FALSE; } -(BOOL)isDeviceiPhone6 { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height>568) { return TRUE; } return FALSE; }


Si ese es realmente tu código, probablemente tengas un error tipográfico en el nombre de la imagen. (Si no, díganos qué significa "no funcionar").

Además, la pantalla de bienvenida no aparece normalmente en todas las aplicacionesDidBecomeActive :. didFinishLaunchingWithOptions: es el momento en que sabes que has sido lanzado y que la pantalla de bienvenida se mostró en tu nombre.

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UIView animateWithDuration:0.2 delay:0 options: UIViewAnimationCurveEaseIn // change effect here. animations:^{ self.window.viewForBaselineLayout.alpha = 0; // and at this alpha } completion:^(BOOL finished){ }]; return YES; }


Solo quería confirmar la respuesta de Patrick en lo que respecta a las aplicaciones Cocos2D, y agregar algunos más detalles también.

El comportamiento es realmente fácil de ver si cambia entre un simulador 6.1 y un simulador 7.x - el primero hace un cambio instantáneo (posiblemente con un destello de negro, por la misma razón), mientras que el simulador 7.x hace una lenta y molesto desvanecimiento a negro, seguido por el parpadeo de su escena Cocos2D.

Si no desea modificar o crear una subclase de las cosas de CCDirector, también puede usar su mismo código para modificar su AppDelegate. En nuestro caso, fue bastante simple:

  1. En appDidFinishLaunching ... esperamos hasta que se haya creado glView, luego agregamos el UIImage como una subvista;
  2. Luego creamos una rutina "postDidFinish ..." y realizamos Selector para llamarla después de 0.1f segundos más o menos. En eso, puede eliminar FromSubview usando su mismo código.

No es tan elegante e invisible como agregar a la clase CCDirector, ¡pero es muy fácil entrar como una solución rápida!


Sospecho que hay más cosas aquí. Ponga algunas declaraciones de registro justo al comienzo del ciclo de la aplicación, ya que aparece la pantalla emergente mientras se llaman los métodos de delegado de la aplicación, inicie sesión allí y use los instrumentos si es necesario para ver qué está sucediendo en el momento del lanzamiento. También trate de finalizar la multitarea en la aplicación antes de reiniciar para ver si eso hace la diferencia, y también pruebe una nueva aplicación vacía para ver si la experiencia es la misma. No ha indicado qué hace la aplicación al iniciarse, pero ¿hay alguna animación que haya codificado para afectar los fundidos de entrada o salida tras el lanzamiento?


Tuve el mismo problema al desarrollar una aplicación con Cocos2D-x y al inicializar mi ventana principal y el contenido de OpenGL

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

En cambio, lo moví al método

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

y ahora ya no se "desvanece". Tenga en cuenta la voluntad en lugar de did . Sin embargo, este método está disponible en iOS6 y versiones posteriores, por lo que si quieres que tu aplicación sea compatible con iOS5.xy versiones anteriores, puedes hacer una verificación de versión de preprocesador para <__IPHONE_6_0 y usar el método "didFinishLaunching", ya que allí no estaba incluso un problema.