【使用UIVisualEffectView实现毛玻璃效果】

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

 

 

posted @ 2016-02-23 16:52  Jesse.morning  阅读(3064)  评论(0编辑  收藏  举报