iOS 7dynamic模糊效果,就像控制中心一样

我试图制作一个类似于iOS7中的控制中心的控制器。 从WWDC会议#226我已经学会了如何使不同的效果模糊的图像

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0); [view drawViewHierarchyInRect:rect]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); lightImage = [newImage applyLightEffect]; 

所以,换句话说,我们只是捕捉一些图像(使截图),执行模糊效果,并使用这个模糊的图像,我们的需要。

但是,如果在控制中心之上打开一些dynamic内容,则会注意到控制中心的模糊背景正在发生变化,内容也在变化。

有谁知道如何复制这种行为?

我看到的唯一方法是捕捉内容,并在一定的时间间隔(例如半秒)造成模糊效果。 但它看起来多余。

以下是我find的准备好的解决scheme:

1.最出人意料的是:使用UIToolBar

 - (id) initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { [self setup]; } return self; } - (id) initWithCoder:(NSCoder *)coder { if ((self = [super initWithCoder:coder])) { [self setup]; } return self; } - (void) setup { if (iOS7OrLater) { self.opaque = NO; self.backgroundColor = [UIColor clearColor]; UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds]; toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; toolbar.barTintColor = self.tintColor; [self insertSubview:toolbar atIndex:0]; } } 

UIToolbar可以用于这个需要,bacuse它有他唯一的内置模糊机制,而这个机制是dynamic的,什么是好的。 但不好的一面是,由于某种原因,它忽略了颜色,使背景看起来无法挽回。

工具栏效果

更新:

为了避免颜色中断,请勿使用barTintColor。 如果你想黑暗的风格模糊(使用UIBarStyleBlack),你也可以改变工具栏的风格。

2. FXBlurView 。

与工具栏不同的是它更积极,但是它的dynamic机制很less见,实际上它只能用于静态背景。 (dynamic=否)。

FBBlurView效果

在iOS8中,我们可以使用UIVisualEffect类在视图上实现模糊效果。

您可以使用以下代码在视图上应用模糊效果。

 UIVisualEffect *blurEffect; blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView *visualEffectView; visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; visualEffectView.frame = MYview.bounds; [MYview addSubview:visualEffectView]; 

我发现LiveFrost是一个伟大的,易于集成的项目,以实现模糊。

https://github.com/radi/LiveFrost/

您可以使用故事板中的UIVisualEffect。

拖动故事板上的模糊视觉效果。 可以通过设置背景颜色的alpha来实现所需的效果。 子视图应添加到视觉效果视图的视图中,并且不受背景模糊的影响。

必须在上面的视图选项中select振动效果。

见图:

使用导航栏提供模糊不适用于运行iOS 7的旧设备。因为它们运行的​​是iOS 7的轻量级版本,几乎没有t