原文: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