苹果中的滤镜种类 很多,今天给大家介绍一款特殊滤镜效果的类--->UIVisualEffectView

他是在iOS 8后,苹果开放了不少创建特效的接口,其中就包括创建毛玻璃(blur)的接口,在使用的时候创建UIVisualEffectView的一个对象

这个对象提供了一种简单的方式来实现复杂的视觉效果。这个可以把这个对象看作是效果的一个容器,实际的效果会影响到该视图对象底下的内容,或者是添加到该视图对象的contentView中的内容。

具体的示例:

1.先建一个背景视图,可以滚动的 来显示效果

UIScrollView *scrollow = [[UIScrollView alloc]initWithFrame:self.view.frame];

    scrollow.bounces = NO;

    scrollow.contentSize = CGSizeMake(1080, 1920);

    UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 1080, 1920)];

    imageView.image = [UIImage imageNamed:@"image14.jpg"]

    [scrollow addSubview:imageView];

    [self.view addSubview:scrollow];

2.创建UIVisualEffectView对象并且添加到父视图上

UIVisualEffectView *effectView =[[UIVisualEffectView alloc]initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];

 //这里一定要设置frame 不然不会显示效果

      effectView.frame = CGRectMake(0, 200, self.view.frame.size.width, 200);

      [self.view addSubview:effectView];

尽量避免将UIVisualEffectView对象的alpha值设置为小于1.0的值,因为创建半透明的视图会导致系统在离屏渲染时去对UIVisualEffectView对象及所有的相关的子视图做混合操作。这不但消耗CPU/GPU,也可能会导致许多效果显示不正确或者根本不显示。

注意:这里添加的父视图不是滑动视图,而是self.view

3. 接下来 创建一个显示的label 在视图上

UILabel *label = [[UILabel alloc]initWithFrame:effectView.bounds];

      label.text = @"乖妮";

    label.textAlignment = NSTextAlignmentCenter;

    label.font = [UIFont systemFontOfSize:80];

    label.textColor = [UIColor blackColor];

[effectView.contentView addSubview:label];

写到这里,这时你运行以下 会有一个模糊的效果  

4. 或许这种效果还不是非常好看,接下来我们来创建模糊对象的子模糊对象 并添加到模糊上

//注意这里创建子模糊的方法 与上面创建 的模糊对象方法有一点不同

UIVisualEffectView *sub = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect]];

 // 这里注意一定要给子模糊一个frame 这样才会有效果 

     sub.frame = effectView.bounds;

// 这里添加子模糊 是添加到 contentView上 

    [effectView.contentView addSubview:sub];

 [sub.contentView addSubview:label];

运行的效果图 



   

 





Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐