美文网首页
CAGradientLayer

CAGradientLayer

作者: _RG | 来源:发表于2019-08-20 14:59 被阅读0次

本文只是摘抄记录, 原著地址: https://www.jianshu.com/p/fb5818d351b2

CAGradientLayer是CALayer的一个子类,用来生成渐变色的Layer。
CAGradientLayer有5个属性:

@property(nullable, copy) NSArray *colors; // CGColorRef数组,用来定义渐变节点颜色
@property(nullable, copy) NSArray<NSNumber *> *locations; // 存储每个渐变节点位置
@property CGPoint startPoint; // 渐变色的起始点
@property CGPoint endPoint; // 渐变色的结束点,和起始点共同能够成渐变方向
@property(copy) NSString *type; // 没什么意义,只能设置为axial

CAGradientLayer具体使用方法如下:

  CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = CGRectMake(0, 100, self.view.frame.size.width, 100);
    [view.layer addSublayer:gradientLayer];
    
    gradientLayer.startPoint = CGPointMake(0, 0);
    gradientLayer.endPoint = CGPointMake(0, 1);
    gradientLayer.colors = @[(__bridge id)[UIColor colorWithRed:0 green:0 blue:0 alpha:0.4].CGColor ,(__bridge id)[UIColor clearColor].CGColor ];
    gradientLayer.locations = @[@(0.0),@(1.0)];

最后把gradientadd到view.layer上就可以了,最终效果是这样的:

屏幕快照 2019-08-20 下午2.57.23.png

但是这种方式用在UIButton上的时候就有点美中不足了,因为我们都希望一个Button在点击的时候会有高亮的效果,但在Button的Layer上又添加了一层gradient,就会导致点击的时候颜色无法改变,因此我们需要将CAGradientLayer转为UIImage,并通过setBackgroundImage:(nullable UIImage *)image forState:(UIControlState)state方法设置上去就可以解决了。
通过CALayer创建UIImage:

- (UIImage *)imageFromLayer:(CALayer *)layer {
    UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0);
    
    [layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return outputImage;
}

相关文章

网友评论

      本文标题:CAGradientLayer

      本文链接:https://www.haomeiwen.com/subject/eadpsctx.html