CAGradientLayer颜色渐变器

使用CAGradientLayer可以实现颜色的渐变, 我们先看下头文件

@interface CAGradientLayer : CALayer

@property(nullable, copy) NSArray *colors;//颜色渐变的数组

@property(nullable, copy) NSArray<NSNumber *> *locations;//渐变颜色的区间分布,locations的数组长度和color一致,默认是nil,会平均分布

@property CGPoint startPoint;//映射locations中第一个位置,用单位向量表示,比如(0,0)表示从左上角开始变化。默认值是(0.5,0.0)
@property CGPoint endPoint;
//映射locations中最后一个位置,用单位向量表示,比如(1,1)表示到右下角变化结束。默认值是(0.5,1.0)
@property(copy) NSString *type;
//默认值是kCAGradientLayerAxial,表示按像素均匀变化。除了默认值也无其它选项
@end

下面是我用上面的代码实现的最终效果,startPoint是(0,0),endPoint是(1,1)。

下面我们试试用这个来实现一个渐变色的圆环,

需要说明的是CAGradientLayer只能实现矩形范围内的颜色渐变, 那渐变的圆环要如何实现呢? mask 对了

首先我们创建两个挨着的矩形渐变色块, 并把两个色块添加到同一个layer

再创建一个带有圆弧形状的layer作为mask

上代码:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //创建圆弧路径
    UIBezierPath * path      = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:45 startAngle:- 7.0 / 6 * M_PI endAngle:M_PI / 6 clockwise:YES];

    //添加圆弧Layer
    [self.view.layer addSublayer:[self createShapeLayerWithPath:path]];

    //配置左色块CAGradientLayer
    CAGradientLayer * leftL  = [self createGradientLayerWithColors:@[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor]];
    leftL.position           = CGPointMake(25, 40);

    //配置右色块CAGradientLayer
    CAGradientLayer * rightL = [self createGradientLayerWithColors:@[(id)[UIColor greenColor].CGColor,(id)[UIColor yellowColor].CGColor]];
    rightL.position          = CGPointMake(75, 40);

    //将两个色块拼接到同一个layer并添加到self.view
    CALayer * layer          = [CALayer layer];
    layer.bounds             = CGRectMake(0, 0, 100, 80);
    layer.position           = self.view.center;
    [layer addSublayer:leftL];
    [layer addSublayer:rightL];
    [self.view.layer addSublayer:layer];

    //创建一个ShapeLayer作为mask
    CAShapeLayer * mask = [self createShapeLayerWithPath:path];
    mask.position       = CGPointMake(50, 40);
    layer.mask          = mask;
    //mask.strokeEnd = 1;
}

//依照路径创建并返回一个CAShapeLayer
-(CAShapeLayer *)createShapeLayerWithPath:(UIBezierPath *)path {

    CAShapeLayer * layer = [CAShapeLayer layer];
    layer.path           = path.CGPath;
    layer.bounds         = CGRectMake(0, 0, 100, 75);
    layer.position       = self.view.center;
    layer.fillColor      = [UIColor clearColor].CGColor;
    layer.strokeColor    = [UIColor colorWithRed:33 / 255.0 green:192 / 255.0 blue:250 / 255.0 alpha:1].CGColor;
    layer.lineCap        = @"round";
    layer.lineWidth      = 10;

    return layer;
}

//依照给定的颜色数组创建并返回一个CAGradientLayer
-(CAGradientLayer *)createGradientLayerWithColors:(NSArray *)colors {

    CAGradientLayer * gradientLayer = [CAGradientLayer layer];
    gradientLayer.colors            = colors;
    gradientLayer.locations         = @[@0,@0.8];
    gradientLayer.startPoint        = CGPointMake(0, 1);
    gradientLayer.endPoint          = CGPointMake(0, 0);
    gradientLayer.bounds            = CGRectMake(0, 0, 50, 80);

    return gradientLayer;
}

@end

可以改变mask的strokeEnd来实现动画

时间: 2024-08-27 03:40:48

CAGradientLayer颜色渐变器的相关文章

iOS CAGradientLayer 颜色渐变

1 CAGradientLayer *layer = [CAGradientLayer layer]; 2 layer.startPoint = (CGPoint){0.5f, 0.0f}; 3 layer.endPoint = (CGPoint){0.5f, 1.0f}; 4 layer.colors = @[(id)[UIColor purpleColor].CGColor, 5 (id)[UIColor cyanColor].CGColor, 6 (id)[UIColor magentaC

code实现透明度渐变和颜色渐变的view

最近用code写了些view上的渐变效果,使得app的UI特效不必全部依赖美工出的图片. 效果如下: 主要用到了Layer上的渐变层,核心代码如下,关于CALaer的使用可参考 //Transparent Gradient Layer - (void) insertTransparentGradient { UIColor *colorOne = [UIColor colorWithRed:(33/255.0) green:(33/255.0) blue:(33/255.0) alpha:0.0

iOS 动画绘制线条颜色渐变的折线图

效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有的也使用了动画,但是线条颜色渐变的折线图的demo少之又少,甚至可以说没有.该Blog阐述了动画绘制线条颜色渐变的折线图的实现方案,以及折线图线条颜色渐变的实现原理,并附以完整的示例. 成果 本人已将折线图封装到了一个UIView子类中,并提供了相应的接口.该自定义折线图视图,基本上可以适用于大部分

添加颜色渐变的UIView

UIView颜色渐变,可以直接使用CAGradientLayer或者重写drawRect:都可以实现渐变的效果,其中本质都是一样的. 比较简单的渐变只要设置过渡的颜色,和开始的位置,若不设置位置,会默认平均分. 1.使用 CAGradientLayer //gradientLayer 1 //gradientLayer 2 func addGradientViewLayer(){ 3 let contentView = UIView(frame: CGRectMake(100, 100, 100

iOS实现一个颜色渐变的弧形进度条

在Github上看到一些进度条的功能,都是通过Core Graph来实现.无所谓正确与否,但是开发效率明显就差很多了,而且运行效率还是值得考究的.其实使用苹果提供的Core Animation能够非常简单和方便的实现环形进度条效果,而且还可以高效的保证动画效果,无论是前进还是后退.文字水平比较有限,就多用代码说话. 1.先来一个结果 80%的状态: 99%的状态: 2.需要用到的宏: #define degreesToRadians(x) (M_PI*(x)/180.0) //把角度转换成PI的

【iOS实现一个颜色渐变的弧形进度条】

在Github上看到一些进度条的功能,都是通过Core Graph来实现.无所谓正确与否,但是开发效率明显就差很多了,而且运行效率还是值得考究的.其实使用苹果提供的Core Animation能够非常简单和方便的实现环形进度条效果,而且还可以高效的保证动画效果,无论是前进还是后退.文字水平比较有限,就多用代码说话. 1.先来一个结果 80%的状态: 99%的状态: 2.需要用到的宏: #define degreesToRadians(x) (M_PI*(x)/180.0) //把角度转换成PI的

js颜色拾取器

几年前,很难找到一个合适的颜色选择器.正好看到很多不错的JavaScript颜色选择器插件,故而把这些编译汇总.在本文,Web设计师和开发人员 Kevin Liew 选取了11个相应插件,有些会比较复杂,其他比较简单,相信应该会有适合你的. 1. ExColor ExColor是一个类似Photoshop样式的jQuery颜色拾取插件,其定制性非常高,通过参数设置可生成各种样式和效果的颜色拾取器.它可以附加到任意的input输入框,通过简单地调用一行函数即可. 2. JScolor JSColo

鼠标在字体上移动,字体颜色渐变

这里的传参方法跟本博客中javascript"鼠标移入移出背景色渐变"中的传参方式相同,我贴的代码是全部都有的,大家可以复制过去直接看效果,有更好的建议的望留言…… <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标在字体上移入移出字体颜色渐变</title> <style&g

自定义控件之圆形颜色渐变进度条--SweepGradient

前几天在群里面有人找圆形可颜色渐变进度条,其中主要的知识点是SweepGradient: mSweepGradient = new SweepGradient(240, 360, new int[] { Color.CYAN, Color.DKGRAY, Color.GRAY, Color.LTGRAY, Color.MAGENTA, Color.GREEN, Color.TRANSPARENT, Color.BLUE }, null); 如上:第三个参数为渐变颜色内容,前两个是坐标信息,240