ios objective-c facebook user-interface uitoolbar

Obtén un desenfoque suave y oscuro de UIToolbar como en la aplicación Facebook iOS 7



objective-c user-interface (2)

¿Alguien sabe qué usa Facebook para su barra de herramientas borrosa?

Ahora, que ya hay innumerables hilos sobre el desenfoque de iOS 7. Todos vienen a estas mismas soluciones:

  1. Use una barra de UIT con translúcido configurado en SÍ, y luego establezca su propiedad barTintColor. El problema con este enfoque es que aumenta significativamente la luminosidad del color. Este es el enfoque que utiliza AMBlurView . La barra de navegación en la aplicación de Facebook permanece en azul oscuro incluso cuando está sobre el contenido blanco. (Con AMBlurView se vuelve azul pastel)
  2. Represente las vistas subyacentes en un contexto gráfico, luego difumine ese contexto, muestrelo como un UIImage y utilícelo como vista de fondo, repítalo 30 veces por segundo. (lo que duele bastante el rendimiento). Este es el enfoque que utiliza FXBlurView . Tampoco parece que Facebook esté usando eso.

He leído detenidamente en los foros de Apple Dev y parece que esto es un desafío técnico incluso para los ingenieros de Apple. Con Facebook cerrando el desenfoque en tiempo real con algo más que los dos enfoques que describí. ¿Alguna idea?


Al parecer, el truco aquí es insertar la capa translúcida como subcapa de la barra de navegación. No tomo crédito por encontrar esto, y el siguiente fragmento ha sido tomado de esta esencia .

UIColor *barColour = [UIColor colorWithRed:0.13f green:0.14f blue:0.15f alpha:1.00f]; UIView *colourView = [[UIView alloc] initWithFrame:CGRectMake(0.f, -20.f, 320.f, 64.f)]; colourView.opaque = NO; colourView.alpha = .7f; colourView.backgroundColor = barColour; self.navigationBar.barTintColor = barColour; [self.navigationBar.layer insertSublayer:colourView.layer atIndex:1];


No pude obtener los resultados deseados a menos que haya agregado las siguientes líneas a la respuesta anterior:

[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationBar.shadowImage = [UIImage new]; self.navigationBar.translucent = YES;

Aquí está el código completo

[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationBar.shadowImage = [UIImage new]; self.navigationBar.translucent = YES; UIColor *barColour = [UIColor colorWithRed:0.13f green:0.14f blue:0.15f alpha:1.00f]; UIView *colourView = [[UIView alloc] initWithFrame:CGRectMake(0.f, -20.f, 320.f, 64.f)]; colourView.opaque = NO; colourView.alpha = .7f; colourView.backgroundColor = barColour; self.navigationBar.barTintColor = barColour; [self.navigationBar.layer insertSublayer:colourView.layer atIndex:1];