在iOS 8后,蘋果開放了不少創建特效的接口,其中就包括創建毛玻璃(blur)的接口。
通常要想創建一個特殊效果(如blur效果),可以創建一個UIVisualEffectView視圖對象,這個對象提供了一種簡單的方式來實現復雜的視覺效果。這個可以把這個對象看作是效果的一個容器,實際的效果會影響到該視圖對象底下的內容,或者是添加到該視圖對象的contentView中的內容。
舉例來看看如果使用UIVisualEffectView實現我們需要的效果:
1 - (void)viewDidLoad { 2
3 [super viewDidLoad]; 4
5 CGRect screenRect = [[UIScreen mainScreen] bounds]; 6
7 //添加待模糊的圖片視圖
8 UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]]; 9 [imageView setFrame:screenRect]; 10 [self.view addSubview:imageView]; 11
12 // 生成特定樣式的模糊效果
13 UIBlurEffect * blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 14
15 // 根據模糊效果生成模糊視圖
16 UIVisualEffectView * effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 17
18 // 設定模糊區域大小
19 [effectView setFrame:screenRect]; 20
21 [self.imageView addSubview:effectView]; 22 }
以上代碼中:
1、我們首先添加一個全屏顯示的imageView,並給其實指定了顯示的圖像;
2、調用類 UIBlurEffect 的靜態方法 effectWithStyle: 生成模糊樣式對象,其后面的枚舉型參數(參看下面代碼)決定了最終的模糊效果;
1 typedef NS_ENUM(NSInteger, UIBlurEffectStyle) { 2 UIBlurEffectStyleExtraLight, 3 UIBlurEffectStyleLight, 4 UIBlurEffectStyleDark 5 }
3、根據模糊樣式對象生成 UIVisualEffectView 模糊視圖;
4、指定模糊視圖的Frame;
5、將模糊視圖作為子視圖添加到imageView上;
至此,實現了我們最終需要的效果,通過代碼不難看出,我們是生成了一張半透明的模糊視圖,其大小和需要模糊的imageView大小一樣,最后將其蓋在了imageView上面,實現了模糊效果;如果我們要實現局部模糊,那么只需調整UIVisualEffectView的Frame即可;
需要注意是的,不應該直接添加子視圖到UIVisualEffectView視圖中,而是應該添加到UIVisualEffectView對象的contentView中。
這里我們只單單通過UIVisualEffectView實現模糊這一功用,對於其它用法請自行查詢