Подтвердить что ты не робот

Получите приятное, темное размытие 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 прибивание размытия в реальном времени с чем-то другим, чем два подхода, которые я описал. Любая идея?

4b9b3361

Ответ 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];