Получите приятное, темное размытие UIToolbar, как в приложении iOS 7 для Facebook
Кто-нибудь знает, что использует Facebook для своей размытой панели инструментов?
![enter image description here]()
Теперь я KNOW уже существует множество потоков о размытии iOS 7. Все они приходят к этим же решениям:
- Используйте UIToolbar с полупрозрачным набором в YES, а затем установите его свойство barTintColor. Проблема с этим подходом заключается в том, что он значительно увеличивает легкость цвета. Это подход, который использует AMBlurView. Панель навигации в приложении Facebook остается синей, даже если она выше белого содержимого. (с AMBlurView он становится пастельным синим)
- Отметьте базовый вид в графическом контексте, затем размывайте этот контекст, выведите его как UIImage и используйте в качестве фонового представления, повторите 30 раз в секунду. (что сильно ухудшает производительность). Это подход, который использует FXBlurView. Похоже, что Facebook тоже это использует.
Я подробно читал в Apple Dev Forums, и похоже, что это технический вызов даже для инженеров Apple. С Facebook прибивание размытия в реальном времени с чем-то другим, чем два подхода, которые я описал. Любая идея?
Ответы
Ответ 1
По-видимому, фокус здесь заключается в том, чтобы вставить прозрачный слой в качестве подуровня навигационной панели. Я не беру на себя ответственность за обнаружение этого, и следующий фрагмент был взят из этого gist.
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];
Ответ 2
Я не мог получить желаемые результаты, если я не добавил следующие строки к вышеприведенному ответу:
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
Вот полный код
[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];