Objective-C实现视图透明度的渐变

来源:互联网 发布:linux 多进程 信号 编辑:程序博客网 时间:2024/04/28 10:38

如题需求,试过增加渐变layer层,和添加阴影效果,但都是把原来的视图遮住了,效果都不理想。看文档中发现CALayer中有这样一个属性:

@property(nullable, strong) CALayer *mask;

把它设置为透明度渐变的效果即可实现视图的透明度的渐变需求,而且以此方法设置透明度并不会影响子视图的透明度。下面以一个图片的透明度渐变写了一个demo:
首先添加图片:

- (void)viewDidLoad {    [super viewDidLoad];    //为了方便查看透明度效果,给背景一个颜色    self.view.backgroundColor = [UIColor redColor];    _myImgView = [[UIImageView alloc]init];    _myImgView.frame = CGRectMake(100, 100, 200, 200);    _myImgView.image = [UIImage imageNamed:@"timg.jpg"];    [self.view addSubview:_myImgView];    [self changeAlpha];}

changeAlpha的实现:

-(void)changeAlpha{    CAGradientLayer *_gradLayer = [CAGradientLayer layer];    NSArray *colors = [NSArray arrayWithObjects:                       (id)[[UIColor colorWithWhite:0 alpha:0] CGColor],                       (id)[[UIColor colorWithWhite:0 alpha:0.5] CGColor],                       (id)[[UIColor colorWithWhite:0 alpha:1] CGColor],                       nil];    [_gradLayer setColors:colors];    //渐变起止点,point表示向量    [_gradLayer setStartPoint:CGPointMake(1.0f, 0.0f)];    [_gradLayer setEndPoint:CGPointMake(0.0f, 0.0f)];    [_gradLayer setFrame:_myImgView.bounds];    [_myImgView.layer setMask:_gradLayer];}

效果:
这里写图片描述

GitHub:https://github.com/FEverStar/AlphaChangeDemo#alphachangedemo

2 0
原创粉丝点击