19

有人知道 Facebook 用什么来制作模糊的工具栏吗?

在此处输入图像描述

现在,我知道已经有无数关于 iOS 7 模糊的线程。他们都得出了相同的解决方案:

  1. 使用半透明设置为 YES 的 UIToolbar,然后设置其 barTintColor 属性。这种方法的问题在于它显着增加了颜色的亮度。这是AMBlurView使用的方法。Facebook 应用程序中的导航栏即使在白色内容上方也保持深蓝色。(使用 AMBlurView 会变成淡蓝色)
  2. 在图形上下文中渲染底层视图,然后模糊该上下文,将其输出为 UIImage 并将其用作背景视图,每秒重复 30 次。(这对性能非常不利)。这是FXBlurView使用的方法。Facebook 似乎也没有使用它。

我在 Apple Dev Forums 上详细阅读过,这似乎对 Apple 工程师来说也是一个技术挑战。Facebook 使用我描述的两种方法之外的其他方法来实现实时模糊。任何想法?

4

2 回答 2

21

显然这里的技巧是插入半透明层作为导航栏的子层。我没有发现这个,下面的代码片段取自这个 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];
于 2013-09-22T01:17:59.247 回答
0

除非我在上面的答案中添加了以下几行,否则我无法获得所需的结果:

 [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];
于 2013-09-25T06:29:26.133 回答