我正在尝试制作一个类似于iOS7中的Control Center的控制器。在WWDC会话#226中,我学习了如何获得具有不同效果的模糊图像
UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);
[view drawViewHierarchyInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lightImage = [newImage applyLightEffect];
因此,换句话说,我们只捕获一些图像(制作屏幕快照),执行模糊效果,然后将这些模糊的图像用于我们的需求。
但是,如果您在一些动态内容上方打开控制中心,则会注意到控制中心的模糊背景和内容的变化也在变化。
有人知道如何复制这种行为吗?
我看到它的唯一方法是捕获内容并以一定间隔(例如半秒)进行模糊效果。但这看起来多余。
最佳答案
这是我已经找到的现成的解决方案:
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可以用于此需求,因为它具有他唯一的内置模糊机制,并且该机制是动态的,所以很好。但坏的是,由于某种原因,它会忽略颜色并使背景看起来无法挽回。
更新:
为避免颜色破坏,请勿使用barTintColor。如果您想要深色模糊(使用UIBarStyleBlack),也可以更改工具栏的样式。
2. FXBlurView。
与工具栏不同,它更具积极性,但它的动态机制还很少见,实际上它只能用于静态背景。 (动态= NO)。