IOS8以前,apple官方並不建議開發者使用相似毛玻璃的模糊效果,也並無開放相關的接口,大部分的開發者是經過轉化CGImage這個類來實現毛玻璃的模糊效果,而且實現的效果也很優秀。在IOS8以後,蘋果官方新出了一個類UIVisualEffectView,經過這個類,實現毛玻璃效果變得垂手可得,並且效率很是之高,下面,咱們來介紹下這個類的簡單用法。app
一、UIVisualEffectView學習
這個類爲咱們提供了一個方便的接口,用來展現複雜的圖像效果。字體
二、UIVisualEffect動畫
官方對這個類的解釋至關簡單,它沒有任何方法,只是充當一個幫助UIVisualEffectView建立的對象,是UIBlurEffect和UIVibrancyEffect的父類,或者能夠理解,它的功能至關於一個抽象類。atom
三、UIBlurEffectspa
這個類是建立模糊效果,也就是毛玻璃效果的類,能夠設置風格。.net
四、UIVibrancyEffect3d
從這個類的名字就能夠看出,這個類是UIBlurEffect的擴展,能夠建立出明亮的標籤的按鈕。code
首先,初始化一個UIVisualEffectView對象:對象
- (instancetype)initWithEffect:(UIVisualEffect *)effect;
這個方法裏面的參數是UIVisuaEffect對象,咱們先用UIBlueEffect的方式來建立:
+ (UIBlurEffect *)effectWithStyle:(UIBlurEffectStyle)style;
這個方法能夠設置一個風格參數,風格枚舉以下:
typedef NS_ENUM(NSInteger, UIBlurEffectStyle) { UIBlurEffectStyleExtraLight,//高亮的風格 UIBlurEffectStyleLight,//亮化的風格 UIBlurEffectStyleDark//暗化的風格 } ;
這些都作好以後,咱們須要給這個UIVisualEfffectView對象一個frame,而後直接加到咱們想要虛化的背景上,整體代碼以下:
UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; UIImage * img = [UIImage imageNamed:@"1.jpg"]; UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]]; //設置虛化度 effectView.alpha=1.0; effectView.frame=CGRectMake(0, 0, self.view.frame.size.width, 200); view.image=img; [view addSubview:effectView]; [self.view addSubview:view];
效果以下:
@property (nonatomic, retain, readonly) UIView *contentView;
這個參數和咱們後面將要說的建立明亮的標籤和按鈕有關,這裏先很少介紹。
@property (nonatomic, copy, readonly) UIVisualEffect *effect;
得到UIVissualEffect對象
@property(nonatomic) CGFloat alpha;
這個參數和虛化的程度有關
咱們先來看一個效果,咱們在剛纔建立的虛化的背景上添加一個標籤,代碼以下:
UILabel * view2 = [[UILabel alloc]init]; view2.text=@"注意看字體的顏色!"; view2.font=[UIFont boldSystemFontOfSize:32]; view2.frame=CGRectMake(0, 0,300, 100); UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; UIImage * img = [UIImage imageNamed:@"1.jpg"]; UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]]; [effectView addSubview:view2]; effectView.alpha=0.8; effectView.frame=CGRectMake(0, 0, self.view.frame.size.width, 200); view.image=img; [view addSubview:effectView]; [self.view addSubview:view];
效果以下:
咱們換另外一種虛化效果來對背景進行虛化:
UILabel * view2 = [[UILabel alloc]init]; view2.text=@"注意看字體的顏色!"; view2.font=[UIFont boldSystemFontOfSize:32]; view2.frame=CGRectMake(0, 0,300, 100); UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; UIImage * img = [UIImage imageNamed:@"1.jpg"]; UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]]; [effectView.contentView addSubview:view2]; effectView.alpha=0.8; effectView.frame=CGRectMake(0, 0, self.view.frame.size.width, 200); view.image=img; [view addSubview:effectView]; [self.view addSubview:view];
效果以下:
如今能夠很明白的瞭解,UIBlurEffect是對整個背景進行虛化,UIVibrancyEffect是對添加的標籤等附件進行背景虛化。注意,這些附件,必須加在UIVisualEffectView的contentView裏,不然將不起任何做用。
經過上面的介紹,咱們能夠發現,在IOS8中建立一個毛玻璃效果是如此的容易,apple官方提供的類也是如此的強大,咱們很輕鬆就能夠實現實時變化虛化程度的動畫效果,這在之前是很是麻煩和低效的。可是apple還有一個忠告:莫要氾濫的使用虛化,致使不好的用戶體驗!
最後,和你們分享一個前兩天寫的小控件,實現的效果是仿IOS8中在桌面下拉會是背景漸變虛化,從頂部會滑出搜索框。以下:能夠當作一個demo來參考。
連接地址:http://d.cocoachina.com/code/detail/297393。
疏漏之處 歡迎指正
學習使用 歡迎轉載
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592