美文网首页
CALayer子类二、CAGradientLayer

CALayer子类二、CAGradientLayer

作者: Carson_Zhu | 来源:发表于2018-02-09 01:29 被阅读23次

下面再说一个比较常用的子类CAGradientLayer,我们一般使用它生成平滑的颜色过渡。

属性

  • colors
    Layer中现实的几种颜色并完成完美过渡,和CAShapeLayerpath一样,colorsCAGradientLayer特殊属性的起点。
  • locations
    颜色区间分布比例,默认为线性均匀分布。取值范围为0~1递增,一般来说其中的元素个数应与colors中的元素个数相同,不同时系统会自行处理分布规则。
    gradientLayer.locations = @[@(0.3),@(0.7)];
  • startPoint、endPoint
    startPoint决定了变色范围的起始点,endPoint决定了变色范围的结束点,两者的连线决定变色的趋势:
注意

locations是相对于startPointendPoint的变化范围而言的。

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.bounds = CGRectMake(0, 0, 200, 200);
gradientLayer.position = self.view.center;
[self.view.layer addSublayer:gradientLayer];
// 设置渐变颜色组
NSArray *colors = @[(__bridge id)[UIColor redColor].CGColor, 
                    (__bridge id)[UIColor blueColor].CGColor,
                    (__bridge id)[UIColor greenColor].CGColor];
gradientLayer.colors = colors;
// 设置对应的位置
gradientLayer.locations = @[@(0.3), @(0.5), @(0.7)];
// 决定渐变方向
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(0, 1);
// 0.3为起点,0.7位结束点
// 红色location为0,相当于0.3,绿色location为1,相当于0.7,效果一样
gradientLayer.locations = @[@(0), @(0.5), @(1)];
gradientLayer.startPoint = CGPointMake(0, 0.3);
gradientLayer.endPoint = CGPointMake(0, 0.7);

效果:

实例

- (void)gradient {
    
    UIView *drawingView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 50)];
    [self.view addSubview:drawingView];
    
    // 创建 CAGradientLayer 对象
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = drawingView.bounds;
    // 设置颜色组
    gradientLayer.colors = @[(__bridge id)[UIColor blackColor].CGColor,
                             (__bridge id)[UIColor whiteColor].CGColor,
                             (__bridge id)[UIColor blackColor].CGColor];
    // 设置渐变方向起点
    gradientLayer.startPoint = CGPointMake(0, 0.5);
    // 设置渐变方向终点
    gradientLayer.endPoint = CGPointMake(1, 0.5);
    //colors中各颜色对应的初始渐变点
    gradientLayer.locations = @[@(0.2), @(0.5), @(0.8)];
    //  添加渐变色到创建的 UIView 上去
    [drawingView.layer addSublayer:gradientLayer];
    
    // 文本信息
    UILabel *label = [[UILabel alloc] initWithFrame:drawingView.bounds];
    label.text = @"请滑动解锁";
    label.textAlignment = NSTextAlignmentCenter;
    label.font = [UIFont systemFontOfSize:30];
    [drawingView addSubview:label];
    // 将textLabel设置成graLayer的遮罩
    gradientLayer.mask = label.layer;
    
    // 动画
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"locations"];
    animation.fromValue = @[@(0), @(0), @(0.3)];
    animation.toValue = @[@(0.7), @(1), @(1)];
    animation.duration = 1.0f;
    animation.repeatCount = MAXFLOAT;
    [gradientLayer addAnimation:animation forKey:nil];
}

运行效果:

相关文章

网友评论

      本文标题:CALayer子类二、CAGradientLayer

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