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 渐变色的更多相关文章

  1. OCiOS开发:音频播放器 AVAudioPlayer

    简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...

  2. swift - layer - 渐变色 - CAGradientLayer

    1.创建 渐变色 /// 渐变色:默认从上到下 private var gradientLayer: CAGradientLayer = { let g = CAGradientLayer() g.c ...

  3. Coding源码学习第三部分(EaseStartView.m)

    首先接上篇的要做一个NSEnumerator 类的延展阅读. 枚举(NSEnumerator) (1)依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口. ( ...

  4. My English Dictionary

    A axis 坐标轴 architecture 结构 B C consider 考虑 closure  闭包 clip  修剪 convert 改变 D default 默认的 valid 有效的 d ...

  5. 【iOS系列】-使用CAGradientLayer设置渐变色

    有时候iOS开发中需要使用到渐变色,来给图片或者view盖上一层,使其显示效果更好,我们这里使用的CAGradientLayer来设置渐变色 要实现的效果如下: Demo地址---下载 // 创建渐变 ...

  6. 通过CAGradientLayer制作渐变色效果(转)

    转载自:http://blog.it985.com/7986.html 看了极客学院的视频之后写的一篇博客,觉得不错,还是作为笔记使用. 简单介绍一下CAGradientLayer吧. Gradien ...

  7. 用CAGradientLayer实现渐变色动画

    效果图: github:https://github.com/RinpeChen/CAGradientLayerBasicDemo

  8. iOS - 开发类库

    开发类库   UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...

  9. iOS:iOS开发非常全的三方库、插件等等

    iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...

随机推荐

  1. C#基础知识-引用类型和值类型的区别(六)

    在第一篇中我们介绍了C#中基本的15种数据类型,这15种数据类型中又分为两大类,一种是值类型,一种是引用类型.值类型有sbyte.short.long.int.byte.ushort.uint.ulo ...

  2. SOAP介绍,为学习WCF做准备

    SOAP 1.什么是SOAP? 答:简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML的协议, 它被设计成在WEB上交换结构化的和固化的信息.WebService的三要素 SO ...

  3. oracle中时间戳转为Date类型的数据

    问题描述: 一个表中原本应该存放date类型的数据,但是不知道之前哪位大仙把两个字段的类型建成了NUMBER类型的了,这样在后台看时间肯定不方便.现在需要改成date类型,但是现在库中是有数据的,不能 ...

  4. IO流之IO的异常处理

    如果发生了IO的异常.我们在实际开发中,对异常时如何处理的,我们来演示一下. public class FileOutputStreamDemo3 { public static void main( ...

  5. Mybatis generator 逆向生成代码

    Mybatis generator 逆向生成代码 简单介绍 本文介绍用mybatis逆向生成javaben dao接口 1.创建maven项目 创建相应的包 附上项目创建完成的图片 然后在pom.xm ...

  6. Canvas知识点汇总

    本文主要记录Canvas基础知识汇总. 1.Canvas定义 <canvas> 元素是HTML5中的新元素,通过它可以在网页中绘制出所需的图形.<canvas>标签只是图形的容 ...

  7. 靠谱的div引入任何外链内容

    靠谱的div引入任何外链内容 开发中经常要在div中引入一个页面,该页面可能是内部页面,可能是一个外部页面,也可能只是一个域名获取的请求. 对于内部页面的加载,建议使用jquery的load函数,如: ...

  8. Bootstrap拟态框+支付宝首页

    任务没完成,继续来!因为刚才网不好,我辛辛苦苦打了洋洋洒洒一大堆都没了! 我们今天主要是说一个简单的由Bootstrap和HTML5结合而成的小案例: 首先:由标题可得知,这是移动端,所以需要这样一串 ...

  9. 快速开始Python/WSGI应用程序

    快速开始Python-wsig应用程序 官方参考文档 安装 uwsgi 安装 pip install uwsgi uwsgi --version # 查看 uwsgi 版本 测试 uwsgi 是否正常 ...

  10. 国家与大洲对应关系json数据

    [ { "continent_cname": "欧洲", "continent_name": "EU", "c ...