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(, ) radius: startAngle:- 7.0 / * M_PI endAngle:M_PI / 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(, );
//配置右色块CAGradientLayer
CAGradientLayer * rightL = [self createGradientLayerWithColors:@[(id)[UIColor greenColor].CGColor,(id)[UIColor yellowColor].CGColor]];
rightL.position = CGPointMake(, );
//将两个色块拼接到同一个layer并添加到self.view
CALayer * layer = [CALayer layer];
layer.bounds = CGRectMake(, , , );
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(, );
layer.mask = mask;
//mask.strokeEnd = 1;
}
//依照路径创建并返回一个CAShapeLayer
-(CAShapeLayer *)createShapeLayerWithPath:(UIBezierPath *)path {
CAShapeLayer * layer = [CAShapeLayer layer];
layer.path = path.CGPath;
layer.bounds = CGRectMake(, , , );
layer.position = self.view.center;
layer.fillColor = [UIColor clearColor].CGColor;
layer.strokeColor = [UIColor colorWithRed: / 255.0 green: / 255.0 blue: / 255.0 alpha:].CGColor;
layer.lineCap = @"round";
layer.lineWidth = ;
return layer;
}
//依照给定的颜色数组创建并返回一个CAGradientLayer
-(CAGradientLayer *)createGradientLayerWithColors:(NSArray *)colors {
CAGradientLayer * gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colors;
gradientLayer.locations = @[@,@0.8];
gradientLayer.startPoint = CGPointMake(, );
gradientLayer.endPoint = CGPointMake(, );
gradientLayer.bounds = CGRectMake(, , , );
return gradientLayer;
}
@end
可以改变mask的strokeEnd来实现动画
CAGradientLayer颜色渐变器的更多相关文章
- CAGradientLayer 颜色渐变实现进度条
#import <UIKit/UIKit.h> @interface TJGradientProgressView : UIView /** * 进度值 */ @property(nona ...
- iOS CAGradientLayer白色渐变至上向下
项目需求当显示富文本内容高度太高的的时候不全部显示出来,而是显示查看更多按钮,当点击查看更多时把全部内容展开.同时未展开部分要加一个渐变模糊的效果. 上效果图: 这里要用到CAGradientLaye ...
- iOS 之使用CAShapeLayer中的CAGradientLayer实现圆环的颜色渐变
本文转载自:http://blog.csdn.net/zhoutao198712/article/details/20864143 在 Github上看到一些进度条的功能,都是通过Core Graph ...
- CAGradientLayer简介 实现颜色渐变
CAGradientLayer使用: CAGradientLayer*gradient = [CAGradientLayerlayer]; gradient.frame = subLayer.fram ...
- 第四界css大会 黑魔法-css网格背景、颜色拾取器、遮罩、文字颜色渐变、标题溢出渐变等
1.css网格背景 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- iOS 动画绘制线条颜色渐变的折线图
效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...
- 【iOS实现一个颜色渐变的弧形进度条】
在Github上看到一些进度条的功能,都是通过Core Graph来实现.无所谓正确与否,但是开发效率明显就差很多了,而且运行效率还是值得考究的.其实使用苹果提供的Core Animation能够非常 ...
- android Button 切换背景,实现动态按钮和按钮颜色渐变
android Button 切换背景,实现动态按钮和按钮颜色渐变 一.添加android 背景筛选器selector实现按钮背景改变 1.右键单击项目->new->Oth ...
- 基于Android的rgb七彩环颜色采集器
代码地址如下:http://www.demodashi.com/demo/11892.html 一.前言. 在大学期间,看到这个rgb灯,蛮好奇的,这么漂亮的颜色采集,并且可以同步到设备rbg灯颜色, ...
随机推荐
- javascript类的继承
1.构造函数方式写类,通过方法调用复制父类属性/字段到子类 实现继承 这里父类,子类都采用构造函数方式写,不用原型.子类调用父类函数来复制父类的属性. 1 2 3 4 5 6 7 8 9 10 11 ...
- Size Balanced Tree(SBT) 模板
首先是从二叉搜索树开始,一棵二叉搜索树的定义是: 1.这是一棵二叉树: 2.令x为二叉树中某个结点上表示的值,那么其左子树上所有结点的值都要不大于x,其右子树上所有结点的值都要不小于x. 由二叉搜索树 ...
- 解决IntelliJ IDEA 创建Maven项目速度慢问题 DarchetypeCatalog
原因 IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件. 该命令的 ...
- apache虚拟目录设置
<VirtualHost *:80> DocumentRoot "/xampp/htdocs/f" ServerName f.e-elitech.net</Vir ...
- POJ 2976 Dropping tests 01分数规划 模板
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6373 Accepted: 2198 ...
- JQuery UI的拖拽功能
JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...
- 前端教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-资源汇总
内容精简 资源这么多,多看看多学习再总结肯定是好的.多读读就算看重了不算浪费时间,毕竟一千个读者就有一千个林黛玉,还有温故而知新,说不定多读一些内容,就发现惊喜了呢.不过,在此也精简一些内容,就1~2 ...
- Linux环境变量相关文件
执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/ ...
- WINDOWS动态链接库--MFC规则动态链接库
第一代window程序员使用windows api进行编程,到了后来,微软推出MFC类库,于是,动态链接库进行了升级,可以在动态连接库中使用MFC的API,这就叫做MFC动态链接库, 其中MFC动态链 ...
- stm32-ucos移植lwip-1(raw)
之前在裸机环境下移植了lwip,功能还是很强大的,但是就我看来,这和uip其实差别也不大,其实lwip更强大的功能需要在操作系统之下才能发挥出来,今天就来做这个 首先我们需要移植操作系统,系统选择uc ...