原文:http://damir.me/ios7-blurring-techniques
有时候你会想要使ios7中得某些视图产生模糊效果,那么你该怎么来实现呢?
静态模糊(字面翻译。。)
首先你要明白,这个技术是新的;以前版本的iOS中用到的这种类似的东西被性能所限制,你只能截图当前的view来获得一个image然后渲染模糊。
但是在iOS6中,你用renderInContext:方法来动态的获取截图花费的时间太长。
好消息是iOS7中,UIView类中包含了一个新的有同样功能的方法:drawViewHierarchyInRect:afterScreenUpdates:
,它消耗的时间比renderInContext:少将近15倍。
现在我们改怎么给截图添加模糊效果呢?好吧,Apple已经给我们封装了可以用的方法: https://developer.apple.com/downloads/ 搜索sample code ,在Sample Code from WWDC 2013中找到iOS_UIImageEffects.zip 下载, 再项目里添加UIImage的UIImageEffects分类, 就会有多种模糊效果的类方法供你选择
实时模糊:
我们怎么实现像苹果那样用通知和control实现实时模糊呢?显然,苹果把这个接口给私有化啦。我们用不了啊。
聪明的小点子:
很多地方我们看起来是实时的,但实际上却是静态的,只不过用了一些小技巧而已
就像Andy Matuschak指出的:苹果用一些技巧来完成或者说是假装实时的完成了图片模糊。这种做法通常发生在老设备上,但iPhone5上面看起来是实时的没有作假
然而,让我们把通知中心做个例子:我猜他提到的截屏并且模糊它的技巧是以通知中心为翘板来完成的,然后把这个image作为通知中心的背景(这一段不知道该怎么翻译),当用户发送了这个通知之后,他们会增加这个背景图的高度来假装实时的模糊,这给用户一个这是实时模糊的错觉
UIToolbar
再者你可以用UIToolbar来替代你要模糊的UIView。把UIToolbar的barStyle
属性设置为UIBarStyleBlack
, 同时把translucent
属性设置为YES,然后随意的调整barTintColor。。。。你就完成啦。你会得到一个实时的半透明的模糊view.
这是不是一个简洁的解决方法呢?当然不是,UIToolbar只能被用来作为toolbar。但如果你仅仅想要获得一个实时的模糊view,那么你就不能拒绝这个方法,因为,苹果并不提供相关的api