在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实现模糊这一功用,对于其它用法请自行查询