OCiOS开发:CAGradientLayer 渐变色
OCiOS开发:CAGradientLayer 渐变色
CAGradientLayer 简介
- CAGradientLayer是CALayer图层类的子类,用于处理渐变色的层结构。
- CAGradientLayer的渐变色可以做隐式动画。
- CAGradientLayer和CAShapeLayer配合使用可实现复杂效果。
- CAGradientLayer可以用作PNG的遮罩效果。
CAGradientLayer 坐标系统
- CAGradientLayer的坐标系统是从坐标(0,0)到(1,1)绘制的矩形。
- CAGradientLayer的frame值的size不为正方形的话,坐标系统会被拉伸。
- CAGradientLayer的startPoint与endPoint会直接影响颜色的绘制方向。
- CAGradientLayer的颜色分割点是以0~1的比例来计算的,颜色分割点为渐变色开始或终止的地方。
CAGradientLayer 属性介绍
- colors:渐变颜色数组
- locations:渐变颜色的区间分布(分割点),locations的数组长度和colors一致。这个属性可不设,默认是nil,系统会平均分布颜色如果有特定需要可设置,数组设置为0 ~ 1之间单调递增。
- startPoint:映射locations中起始位置,用单位向量表示。比如(0, 0)表示从左上角开始变化。默认值是:(0.5, 0.0)。
- endPoint:映射locations中结束位置,用单位向量表示。比如(1, 1)表示到右下角变化结束。默认值是:(0.5, 1.0)。
- type:默认值是kCAGradientLayerAxial,表示按像素均匀变化。
CAGradientLayer 案例
三原色渐变
- 效果展示
- 代码示例
- (void)viewDidLoad {
[super viewDidLoad];
/**< 初始化colorsView */
UIView *colorsView = [[UIView alloc] init];
colorsView.bounds = CGRectMake(0, 0, 220, 220);
colorsView.center = self.view.center;
[self.view addSubview:colorsView];
/**< 初始化渐变层 */
CAGradientLayer *gradientColorLayer = [CAGradientLayer layer];
gradientColorLayer.frame = colorsView.bounds;
[colorsView.layer addSublayer:gradientColorLayer];
/**< 设置颜色组 */
gradientColorLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,
(__bridge id)[UIColor greenColor].CGColor,
(__bridge id)[UIColor blueColor].CGColor];
/**< 设置颜色分割点 */
gradientColorLayer.locations = @[@(0.25), @(0.5), @(0.75)];
/**< 设置渐变颜色方向 */
// 1、起始位置
gradientColorLayer.startPoint = CGPointMake(0, 0);
// 2、结束位置
gradientColorLayer.endPoint = CGPointMake(0, 1);
}
- 分割点动画
- 效果展示
- 代码示例
#import "ViewController.h"
@interface ViewController ()
@property (strong, nonatomic) CAGradientLayer *gradientLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 添加 CAGradientLayer
[self.view.layer addSublayer:self.gradientLayer];
// 延时3秒执行,实现分割点动画(隐式动画)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 颜色分割点效果
self.gradientLayer.locations = @[@(0.4), @(0.5), @(0.6)];
});
}
#pragma mark - Getter methods
- (CAGradientLayer *)gradientLayer {
if (!_gradientLayer) {
// 初始化并创建
_gradientLayer = [CAGradientLayer layer];
_gradientLayer.frame = CGRectMake(0, 0, 250, 250);
_gradientLayer.position = self.view.center;
_gradientLayer.borderWidth = 1.f;
// 设置颜色
_gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,
(__bridge id)[UIColor greenColor].CGColor,
(__bridge id)[UIColor blueColor].CGColor];
// 设置颜色渐变方向
_gradientLayer.startPoint = CGPointMake(0, 0);
_gradientLayer.endPoint = CGPointMake(1, 0);
// 设置颜色分割点
_gradientLayer.locations = @[@(0.25), @(0.5), @(0.75)];
}
return _gradientLayer;
}
@end
色差动画
- 实现思路
- 确定渐变色渐变方向;
- 至少设定两种颜色,此处设置两种颜色为例,其中一种是透明色,另外一种是自定义颜色。
- 设定好locations颜色分割点。
- 效果展示
- 代码示例
#import "ViewController.h"
@interface ViewController () {
NSTimer *_timer; /**< 定时器 */
}
@property (strong, nonatomic) CAGradientLayer *gradientLayer; /**< 渐变层 */
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
// 创建背景图片
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]];
imageView.bounds = CGRectMake(0, 0, 260, 450);
imageView.center = self.view.center;
[self.view addSubview:imageView];
// 添加渐变层
[imageView.layer addSublayer:self.gradientLayer];
// 初始化定时器
_timer = [NSTimer scheduledTimerWithTimeInterval:1.f
target:self
selector:@selector(respondsToTimerEvent)
userInfo:nil
repeats:YES];
}
#pragma mark - Timer and animations methods
- (void)respondsToTimerEvent {
// 设定颜色组动画
self.gradientLayer.colors = @[(__bridge id)[UIColor clearColor].CGColor,
(__bridge id)[UIColor colorWithRed:arc4random()%255 / 255.f
green:arc4random()%255 / 255.f
blue:arc4random()%255 / 255.f
alpha:1].CGColor];
// 设置颜色分割点动画
self.gradientLayer.locations = @[@(arc4random() %10 / 10.f), @(1.f)];
}
#pragma mark - Getter methods
- (CAGradientLayer *)gradientLayer {
if (!_gradientLayer) {
// 初始化渐变层
_gradientLayer = [CAGradientLayer layer];
_gradientLayer.frame = CGRectMake(0, 0, 260, 450);
// 设置颜色渐变方向
_gradientLayer.startPoint = CGPointMake(0, 0);
_gradientLayer.endPoint = CGPointMake(0, 1);
// 设定颜色组
_gradientLayer.colors = @[(__bridge id)[UIColor clearColor].CGColor,
(__bridge id)[UIColor blueColor].CGColor];
// 设定颜色分割点
_gradientLayer.locations = @[@(0.5f), @(1.f)];
}
return _gradientLayer;
}
@end
OCiOS开发:CAGradientLayer 渐变色的更多相关文章
- OCiOS开发:音频播放器 AVAudioPlayer
简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...
- swift - layer - 渐变色 - CAGradientLayer
1.创建 渐变色 /// 渐变色:默认从上到下 private var gradientLayer: CAGradientLayer = { let g = CAGradientLayer() g.c ...
- Coding源码学习第三部分(EaseStartView.m)
首先接上篇的要做一个NSEnumerator 类的延展阅读. 枚举(NSEnumerator) (1)依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口. ( ...
- My English Dictionary
A axis 坐标轴 architecture 结构 B C consider 考虑 closure 闭包 clip 修剪 convert 改变 D default 默认的 valid 有效的 d ...
- 【iOS系列】-使用CAGradientLayer设置渐变色
有时候iOS开发中需要使用到渐变色,来给图片或者view盖上一层,使其显示效果更好,我们这里使用的CAGradientLayer来设置渐变色 要实现的效果如下: Demo地址---下载 // 创建渐变 ...
- 通过CAGradientLayer制作渐变色效果(转)
转载自:http://blog.it985.com/7986.html 看了极客学院的视频之后写的一篇博客,觉得不错,还是作为笔记使用. 简单介绍一下CAGradientLayer吧. Gradien ...
- 用CAGradientLayer实现渐变色动画
效果图: github:https://github.com/RinpeChen/CAGradientLayerBasicDemo
- iOS - 开发类库
开发类库 UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...
- iOS:iOS开发非常全的三方库、插件等等
iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...
随机推荐
- Java Mail邮件发送的简单实现
1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方 ...
- vs文件属性(复制到输出目录)是什么意思
右击项目里的文件,选择属性(F4)会有复制到输出目录的选项. 它提供三项选择,如图: 如果选择始终复制或如果较新则复制会在该程序集的bin目录下生成该文件,如图:
- java字节码速查笔记
java字节码速查笔记 发表于 2018-01-27 | 阅读次数: 0 | 字数统计: | 阅读时长 ≍ 执行原理 java文件到通过编译器编译成java字节码文件(也就是.class文件) ...
- SQL:exec sp_executesql 用法
--這種是無效的過程 declare @sql nvarchar(500), @where nvarchar(500),@i nvarchar(64),@p nvarchar(50),@id int ...
- 从零开始的全栈工程师——利用CSS3画一个正方体 ( css3 )
transform属性 CSS3的变形(transform)属性让元素在一个坐标系统中变形.transform属性的基本语法如下: transform:none | <transform-fun ...
- 深入理解Javascript之执行上下文(Execution Context)
在这篇文章中,将比较深入地阐述下执行上下文 - Javascript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数 ...
- Java入门到精通——调错篇之Spring2.5使用AOP时报错only available on JDK 1.5 and higher
一.问题描述及原因. 在Spring2.5Aop例子中的时候会出现一个错误only available on JDK 1.5 and higher,大概意思就是需要JDK1.5甚至更高版本.但是我用的 ...
- Microsoft BI - SSRS
1. Shared Dataset 功能在 SQL Server 2008 R2 / 2012 / 2014 的下列三个版本中不支持,详情请参考此处: Express Edition with Adv ...
- 两种计算Java对象大小的方法
之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...
- Python3基本数据类型(一、数字类型)
第一次写博客,感觉心情比较紧张,有一种要上台演讲的紧张感(虽然可能大概也许不会有人看).在此立个flag,以后每个学习阶段都要写一篇博客,来记录自己学习成长的这段日子.Fighting! 废话不多说, ...