美文网首页
CAGradientLayer & CAShapeLay

CAGradientLayer & CAShapeLay

作者: 音吹 | 来源:发表于2016-08-04 14:25 被阅读143次

    CAGradientLayer:渐变色结构

    • 属性解析:
        CAGradientLayer * gtLayer = [CAGradientLayer layer];
        gtLayer.frame = view.bounds;
        [gtLayer setColors:[NSArray arrayWithObjects:(id)[UIColor redColor].CGColor,(id)[UIColor blackColor].CGColor,(id)[UIColor blueColor].CGColor, nil]];
        //location表示在这个位置要开始进行颜色渐变
        [gtLayer setLocations:@[@(0.5),@(0.6),@0.7]];
        //颜色起始点
        [gtLayer setStartPoint:CGPointMake(0, 0.5)];
        //颜色结束点
        [gtLayer setEndPoint:CGPointMake(1, 0.5)];
        [view.layer addSublayer:gtLayer];
      
    * startPoint:默认点是(0.5,0);
    * endPoint:默认点是(0.5,1);
    
    ####CAGradientLayer:可以为它添加动画来实现一些效果;
    * 简单实现:
    
    ![ColorShape.gif](https://img.haomeiwen.com/i1361866/078b5978ba84f40d.gif?imageMogr2/auto-orient/strip)
    这个动画是用过使用环形CAShapeLayer进行遮罩,添加CABasicAnimation实现;
    代码:
    
    self.view.backgroundColor = [UIColor blackColor];
    
    CAGradientLayer * gtLayer = [CAGradientLayer layer];
    gtLayer.frame = self.view.bounds;
    [gtLayer setColors:[NSArray arrayWithObjects:(id)[UIColor redColor].CGColor,(id)[UIColor whiteColor].CGColor,(id)[UIColor redColor].CGColor, nil]];
    self.location = -0.1;
    //location表示在这个位置要开始进行颜色渐变
    [gtLayer setLocations:@[@(-0.2),@(-0.1),@(0)]];
    //颜色起始点
    [gtLayer setStartPoint:CGPointMake(0, 0)];
    //颜色结束点
    [gtLayer setEndPoint:CGPointMake(1, 0)];
    [self.view.layer addSublayer:gtLayer];
    self.gl= gtLayer;
    
    //创建一个
    CAShapeLayer * shapeL = [CAShapeLayer layer];
    
    UIBezierPath * pathS = [UIBezierPath bezierPathWithArcCenter:CGPointZero radius:100 startAngle:0 endAngle:M_PI*2 clockwise:YES];
    shapeL.path = pathS.CGPath;
    //默认相当于中心
    shapeL.position = self.view.center;
    shapeL.fillColor = [UIColor clearColor].CGColor;
    
    shapeL.strokeColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:shapeL];
    shapeL.strokeEnd = 1.f;
    gtLayer.mask = shapeL;
    
    [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(Roll) userInfo:nil repeats:YES];
    
    • (void)Roll
      {
      CABasicAnimation * animationC = [CABasicAnimation animationWithKeyPath:@"locations"];
      animationC.fromValue = @[@(-0.2),@(-0.1),@0];
      animationC.toValue = @[@1,@1.1,@1.2];
      animationC.duration = 1.5;
      [self.gl addAnimation:animationC forKey:nil];
      }
    ***
    ### CAShapeLayer
    * 效果图:
    
    ![ShapeLayer.gif](https://img.haomeiwen.com/i1361866/580fbc383c320998.gif?imageMogr2/auto-orient/strip)
    
    代码:
    
    UIView * view = [[UIView alloc] init];
    view.frame = CGRectMake(100, 100, 200, 200);
    view.layer.masksToBounds = YES;
    view.layer.cornerRadius = 50;
    view.alpha = 0.5;
    [self.view addSubview:view];
    
    UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:50.0f startAngle:0 endAngle:M_PI * 2 clockwise:YES];
    
    CAShapeLayer * shapeLayer= [CAShapeLayer layer];
    shapeLayer.frame = CGRectMake(15, 15, 0, 0);
    //边缘颜色
    shapeLayer.strokeColor = [UIColor blackColor].CGColor;
    //填充颜色
    shapeLayer.fillColor = [UIColor clearColor].CGColor;
    //端点处的样式
    shapeLayer.lineCap = @"round";
    //轨迹
    shapeLayer.path = path.CGPath;
    
    //画虚线的时候用
    //从10的坐标点开始显示
    //    shapeLayer.lineDashPhase = 10;
    //画10个点,空20格点,画20个点,虚10个点,画20个点,,,这样这三个数一直循环
    //    shapeLayer.lineDashPattern = @[@10,@20,@20];
    
    
    shapeLayer.lineWidth = 10.0f;
    //开始点
    shapeLayer.strokeStart = 0.0;
    //结束点
    shapeLayer.strokeEnd = 0.8f;
    self.start = 0.0;
    self.end = 0.8;
    
    self.shapeL = shapeLayer;
    [view.layer addSublayer:shapeLayer];
    [view.layer setMask:shapeLayer];
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        shapeLayer.speed = 0.1;
        shapeLayer.strokeStart = 0.5;
        shapeLayer.strokeEnd= 0.9;
        shapeLayer.lineWidth = 6.0f;
    });
    
    CABasicAnimation * basicA = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    basicA.duration = 1.0f;
    basicA.fromValue = @(0.0f);
    basicA.toValue = @(0.8f);
    [shapeLayer addAnimation:basicA forKey:@"anyone"];
    
    CAGradientLayer * colorLager = [CAGradientLayer layer];
    colorLager.frame =CGRectMake(0, 0, view.bounds.size.width+15, view.bounds.size.height+15);
    
    [colorLager setColors:[NSArray arrayWithObjects:(id)[UIColor redColor].CGColor,(id)[UIColor cyanColor].CGColor,(id)[UIColor magentaColor].CGColor,nil]];
    colorLager.shadowPath = path.CGPath;
    [colorLager setLocations:@[@(0.2),@(0.3),@(0.8)]];
    [colorLager setStartPoint:CGPointMake(0, 0)];
    [colorLager setEndPoint:CGPointMake(1, 1)];
    
    [view.layer addSublayer:colorLager];
    

    相关文章

      网友评论

          本文标题:CAGradientLayer & CAShapeLay

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