ios - porque - no puedo abrir facebook en mi iphone
La transición de color de la barra de estado del menú lateral iOS7. Como en la aplicación de Facebook iOS7 (3)
He estado tratando de lograr lo mismo. El método que estoy usando para hacer esto se basa en los siguientes conceptos:
- Una imagen de fondo con una altura de 64 puntos llenará tanto UINavigationBar como UIStatusBar.
- Una imagen de fondo con una altura de 44 puntos llenará UINavigationBar y dejará UIStatusBar en negro.
- Puede agregar una subvista a la parte superior de la vista actual delControl de navegación y se ubicará debajo de UIStatusBar.
Entonces, primero, necesita crear dos imágenes con la apariencia deseada de UINavigationBar:
Una imagen de 640x128px para cubrir la barra de navegación y la barra de estado ( ImageA )
Y una imagen de 640x88px para cubrir la barra de navegación pero deja la barra de estado negra ( Imagen B ).
En la application:didFinishLaunchingWithOptions:
método application:didFinishLaunchingWithOptions:
establezca el fondo de su UINavigationBar con ImageA con [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"ImageA.png"] forBarMetrics:UIBarMetricsDefault];
Cuando el menú lateral comience a abrir, querrá cambiar el UINavigationBar para que use ImageB y cree una vista que agregará debajo de UIStatusBar. Aquí hay un código de muestra para hacer justamente eso:
// Add a property for your "temporary status bar" view
@property (nonatomic, strong) UIView *temporaryStatusBar;
Y en el código donde el menú lateral comienza a abrir:
// Create a temporary status bar overlay
self.temporaryStatusBar = [[UIView alloc] initWithFrame:[[UIApplication sharedApplication] statusBarFrame]];
self.temporaryStatusBar.backgroundColor = [UIColor yourColor];
[self.navigationController.view addSubview:self.temporaryStatusBar];
// Update both the current display of the navigationBar and the default appearance values
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"imageB.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"imageB.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setNeedsDisplay];
A medida que el menú lateral se abre, o cuando el usuario abre el menú, todo lo que necesita hacer es ajustar el nivel alfa de la superposición UIStatusBar. Cuando el menú lateral está completamente abierto, UINavigationBar debe tener ImageB como su imagen de fondo y UIStatusBar overlay debe tener un alfa de 0. Cuando se cierre el menú lateral, querrá reemplazar el fondo UINavigationBar con ImageA y eliminar la superposición UIStatusBar .
¡Hazme saber si esto funciona para ti!
La aplicación iOS7 de Facebook tiene un menú lateral derecho que se puede mostrar deslizando de derecha a izquierda o haciendo clic en el botón superior derecho. Cuando se abre este menú, hay una transición de color en toda la barra de estado de azul a negro y viceversa cuando se cierra.
Esta imagen muestra ambas barras de estado de lado a lado
Parece una muy buena solución para aplicaciones de iOS con menús laterales.
¿Alguna idea o forma de cómo lograr esto?
Actualmente estoy usando JASidePanels . ¡Gracias!
Me las arreglé para encontrar una manera muy simple y elegante de hacer esto, que imita la funcionalidad de la aplicación de Facebook a la perfección.
Aquí está mi enfoque:
- Crear vista con marco de barra de estado
- Establecer el color de fondo de la vista en negro, la opacidad en 0
- Agregue vista como subvista a cualquier vista raíz (necesita una vista que cubra tanto la vista central como los menús, para que no se limite a una sola vista; una buena opción para esto es el controlador de vista de contenedor utilizado por su implementación del controlador de menú)
- Establezca la opacidad de la vista en el método de animación del menú de la implementación del controlador de menú
Aquí está mi implementación específica, usando MMDrawerController :
Subclasicé MMDrawerController (de hecho, ya tenía una subclase para usar MMDrawerController con guiones gráficos ) y agregué este código al método init
la clase:
// Setup view behind status bar for fading during menu drawer animations
if (OSVersionIsAtLeastiOS7()) {
self.statusBarView = [[UIView alloc] initWithFrame:[[UIApplication sharedApplication] statusBarFrame]];
[self.statusBarView setBackgroundColor:[UIColor blackColor]];
[self.statusBarView setAlpha:0.0];
[self.view addSubview:self.statusBarView];
}
// Setup drawer animations
__weak __typeof(&*self) weakSelf = self; // Capture self weakly
[self setDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSide drawerSide, CGFloat percentVisible) {
MMDrawerControllerDrawerVisualStateBlock block;
block = (drawerSide == MMDrawerSideLeft) ? [MMDrawerVisualState parallaxVisualStateBlockWithParallaxFactor:15.0] : nil; // Right side animation : Left side animation
if(block){
block(drawerController, drawerSide, percentVisible);
}
[weakSelf.statusBarView setAlpha:percentVisible]; // THIS IS THE RELEVANT CODE
}];
También agregué self.statusBarView
como propiedad privada.
La primera sección del código crea una vista, la configura y la agrega como una subvista de la vista de la subclase MMDrawerController. El método
OSVersionIsAtLeastiOS7()
es un método personalizado que simplifica la comprobación para ver si el dispositivo ejecuta iOS 7 (si no es así, su vista personalizada aparecerá debajo de la barra de estado, que no desea).La segunda sección de código es el método setDrawerVisualStateBlock de
setDrawerVisualStateBlock
, que establece el código de animaciones que se realizará cuando se abre y cierra un menú. Las primeras líneas de código son un código repetitivo que establece uno de los bloques de animaciones precompilados para cada menú (quería paralaje a la izquierda, pero nada a la derecha). El código relevante es la última línea del bloque:[weakSelf.statusBarView setAlpha:percentVisible];
, que establece la opacidad de la vista de la barra de estado para que coincida con el porcentaje que el menú está actualmente abierto. Esto permite la animación cruzada suave que ves en la aplicación de Facebook. También notará que me he asignadoself
a una variableweakSelf
, a fin de evitar la advertencia del compilador "retener ciclo".
Este es mi enfoque específico al usar MMDrawerController y una subclase, que hice más por conveniencia porque ya tenía la subclase en su lugar, que porque es necesariamente el mejor enfoque o la única forma de hacerlo. Probablemente podría implementarse de varias otras maneras, utilizando MMDrawerController sin una subclase, o utilizando cualquier otra implementación de menú lateral.
El resultado final es una suave animación de desvanecimiento a negro detrás de la barra de estado, exactamente como se ve en la nueva aplicación de Facebook.
Puede usar esta impresionante biblioteca de menú de diapositivas
https://github.com/arturdev/AMSlideMenu
En este proyecto de demostración, puede ver cómo hacerlo escribiendo 4 líneas de código.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Setting navigation''s bar tint color self.navigationController.navigationBar.barTintColor = [UIColor colorWithHex:@"#365491" alpha:1]; // Making view with same color that navigation bar UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 20)]; statusBarView.backgroundColor = [UIColor colorWithHex:@"#365491" alpha:1]; // Replace status bar view with created view and do magic :) [[self mainSlideMenu] fixStatusBarWithView:statusBarView]; }