毛玻璃效果

2018-05-08  本文已影响124人  coderhlt

一、UIToolbar

  UIImageView *imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"wf@2x.jpg"]];
    [self.view addSubview:imageView];
    
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:imageView.bounds];
    toolbar.barStyle = UIBarStyleBlack;
    [imageView addSubview:toolbar];
    toolbar.alpha = 0.5;

二、UIVisualEffectViewi(OS8之后苹果提供制作毛玻璃效果的相关API)

UIVisualEffectView:继承UIView。一个实现一些复杂视觉效果的对象。个人理解就是一个具有特殊视觉效果的View。

UIBlurEffect : 毛玻璃化效果,使UIVisualEffectView产生毛玻璃效果。是UIVisualEffect的一个子类

UIVibrancyEffect : 生动效果, 该效果能够放大和调整放在UIVisualEffectView对象下面的内容的颜色。是UIVisualEffect的一个子类

UIVisualEffect:一个视觉效果抽象类,继承自NSObject,是UIBlurEffect和UIVibrancyEffect的父类

    UIImageView *imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"wf@2x.jpg"]];
    [self.view addSubview:imageView];

    //1.初始化一个UIVisualEffectView对象
    UIVisualEffectView *effectView=[[UIVisualEffectView alloc]init];
    effectView.frame=CGRectMake(0, 0, 400, 300);
    [imageView addSubview:effectView];
   
    //2、给UIVisualEffectView对象设置效果
    
    //2.1初始化一个UIBlurEffectStyleLight类型的毛玻璃效果的对象
    UIBlurEffect *blureffect=[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    
    //2.2设置简单的毛玻璃效果
    effectView.effect=blureffect;

使用注意:量避免将UIVisualEffectView对象的alpha值设置为小于1.0的值,因为创建半透明的视图会导致系统在离屏渲染时去对UIVisualEffectView对象及所有的相关的子视图做混合操作,比较消耗性能。 因此使用时尽量避免修改effectView的alpha。

 UIImageView *imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"wf@2x.jpg"]];
    [self.view addSubview:imageView];
    
    //1.初始化一个UIVisualEffectView对象
    UIVisualEffectView *effectView=[[UIVisualEffectView alloc]init];
    effectView.frame=CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height/2);
    
    //1.2添加内容到effectView上
    UIView *redView = [[UIView alloc]init];
    redView.frame = effectView.bounds;
    redView.backgroundColor = [UIColor redColor];
    
    [effectView.contentView addSubview:redView];
    //注意:不能将redView直接添加到effectView上,应该将redView添加到effectView的contentView上
    
    //2、给UIVisualEffectView对象设置效果
    //2.1初始化一个UIBlurEffect对象
    UIBlurEffect *blureffect=[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    
    //2.2初始化一个UIVibrancyEffect对象
    UIVibrancyEffect * vibrancy=[UIVibrancyEffect effectForBlurEffect:blureffect];
    
    //2.3设置生动的效果
    effectView.effect=vibrancy;
    
    [imageView addSubview:effectView];
屏幕快照 2018-05-08 下午3.01.39.png

使用注意:不要在UIVisuaEffectView实例化View上面直接添加subViews,应该将需要添加的子视图添加到其contentView上。

  UIImageView *imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"wf@2x.jpg"]];
    [self.view addSubview:imageView];
    
    //1.初始化一个UIVisualEffectView对象
    UIVisualEffectView *effectView=[[UIVisualEffectView alloc]init];
    effectView.frame=CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height/2);
    
    //1.2添加内容到effectView上
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(100,00,280,90)];
    
    label.text=@"我是一名ios开发者";
    
    label.textAlignment=NSTextAlignmentLeft;
    
    label.font= [UIFont systemFontOfSize:30];
    
    label.tintColor=[UIColor redColor];//lable.textcolor是不起作用的
    //Because the vibrancy effect is color dependent, subviews added to the contentView need to be tintColorDidChange aware and must be prepared to update themselves accordingly.
    
    [effectView.contentView addSubview:label];
    //注意:不能将label直接添加到effectView上,应该将redView添加到effectView的contentView上
    
    //2、给UIVisualEffectView对象设置效果
    //2.1初始化一个UIBlurEffect对象
    UIBlurEffect *blureffect=[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    
    //2.2初始化一个UIVibrancyEffect对象
    UIVibrancyEffect * vibrancy=[UIVibrancyEffect effectForBlurEffect:blureffect];
    
    //2.3设置生动的效果
    effectView.effect=vibrancy;
    
    [imageView addSubview:effectView];

屏幕快照 2018-05-08 下午3.33.32.png
上一篇下一篇

猜你喜欢

热点阅读