CAGradientLayer功能

一、CAGradientLayer介绍

1、CAGradientLayer是用于处理渐变色的层结构

2、CAGradientLayer的渐变色能够做隐式动画

3、大部分情况下。CAGradientLayer都是与CAShapeLayer配合使用的

4、CAGradientLayer能够用作png遮罩效果

二、CAGradientLayer坐标系统

1、CAGradientLayer的坐标系统是从坐标(0,0)到(1,1)绘制的矩形

2、CAGradientLayer的frame值的size不为正方形的话,坐标系统会被拉伸

3、CAGradientLayer的startPoint与endPoint会直接影响颜色的绘制方向

4、CAGradientLayer的颜色切割点是以0到1的比例来计算的

三、色差动画的实现

1、确定渐变色渐变方向

2、设定两种颜色,当中一种是透明色,第二种是自己定义颜色

3、设定好location颜色切割点值

4、CAGradientLayer的颜色切割点是以0到1的比例来计算的

@property (nonatomic,strong) CAGradientLayer *gradientLayer;//渐变层

@property (nonatomic,strong) NSTimer         *timer;       //
定时器

- (void) colors {

self.view.backgroundColor = [UIColorblackColor];

//
创建背景图片

UIImageView *imageView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"bg"]];

imageView.center       =self.view.center;

[self.viewaddSubview:imageView];

//
初始化渐变层

self.gradientLayer       = [CAGradientLayerlayer];

self.gradientLayer.frame = imageView.bounds;

[imageView.layeraddSublayer:self.gradientLayer];

//设定颜色渐变方向

self.gradientLayer.startPoint =CGPointMake(0,0);

self.gradientLayer.endPoint   =CGPointMake(0,1);

//
设定颜色组

self.gradientLayer.colors =@[(__bridgeid)[UIColorclearColor].CGColor,

(__bridgeid)[UIColorredColor].CGColor];

//
设定颜色切割点

self.gradientLayer.locations =
@[@(0.5f), @(1.f)];

//
初始化定时器

self.timer = [NSTimerscheduledTimerWithTimeInterval:2.f

target:self

selector:@selector(timerEvent)

userInfo:nil

repeats:YES];

}

- (void)timerEvent {

//
设定颜色组动画

self.gradientLayer.colors =@[(__bridgeid)[UIColorclearColor].CGColor,

(__bridgeid)[UIColorcolorWithRed: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)];

}

四、用CAGradientLayer实现带色差动画的View

1、确定几个属性值

2、确定能够做动画的參数

3、重写setter方法做动画

typedefenum : NSUInteger {

UP,   // 从上往下

DOWN, // 从下往上

RIGHT,// 从右往左

LEFT, // 从左往右

} EColorDirection;

@interface ColorUIImageView :UIImageView

/**

*  确定方向(能够做动画)

*/

@property (nonatomic,assign) EColorDirection  direction;

/**

*  颜色(能够做动画)

*/

@property (nonatomic,strong)UIColor  *color;

/**

*  百分比(能够做动画)

*/

@property (nonatomic,assign)CGFloat   percent;

@end

#import "ColorUIImageView.h"

@interface
ColorUIImageView ()

@property (nonatomic,strong)CAGradientLayer *gradientLayer;

@end

@implementation ColorUIImageView

- (instancetype)initWithFrame:(CGRect)frame

{

self = [superinitWithFrame:frame];

if (self) {

//
初始化CAGradientLayer

self.gradientLayer           = [CAGradientLayerlayer];

self.gradientLayer.frame     =self.bounds;

self.gradientLayer.colors    =@[(__bridgeid)[UIColorclearColor].CGColor,

(__bridgeid)[UIColorredColor].CGColor];

self.gradientLayer.locations =@[@(1),@(1)];

[self.layeraddSublayer:self.gradientLayer];

}

return
self;

}

#pragma mark - 重写setter,getter方法

@synthesize color = _color;

- (void)setColor:(UIColor *)color {

_color = color;

self.gradientLayer.colors =@[(__bridgeid)[UIColorclearColor].CGColor,

(__bridgeid)color.CGColor];

}

- (UIColor *)color {

return _color;

}

@synthesize percent =_percent;

- (void)setPercent:(CGFloat)percent {

_percent = percent;

self.gradientLayer.locations =@[@(percent),@(1)];

}

- (CGFloat)percent {

return_percent;

}

@synthesize direction =_direction;

- (void)setDirection:(EColorDirection)direction {

_direction = direction;

if (direction == UP) {

self.gradientLayer.startPoint =CGPointMake(0,0);

self.gradientLayer.endPoint   =CGPointMake(0,1);

}else if (direction ==DOWN) {

self.gradientLayer.startPoint =CGPointMake(0,1);

self.gradientLayer.endPoint   =CGPointMake(0,0);

}else if (direction ==RIGHT) {

self.gradientLayer.startPoint =CGPointMake(1,0);

self.gradientLayer.endPoint   =CGPointMake(0,0);

}else if (direction ==LEFT) {

self.gradientLayer.startPoint =CGPointMake(0,0);

self.gradientLayer.endPoint   =CGPointMake(1,0);

}else {

self.gradientLayer.startPoint =CGPointMake(0,0);

self.gradientLayer.endPoint   =CGPointMake(0,1);

}

}

- (EColorDirection)direction {

return_direction;

}

@end

#import "ColorUIImageView.h"

@interface ViewController ()

@property (nonatomic,strong)ColorUIImageView *colorView;

@end

@implementation ViewController

- (void)viewDidLoad {

[superviewDidLoad];

self.colorView        = [[ColorUIImageViewalloc] initWithFrame:CGRectMake(0,0,198,
253)];

self.colorView.center =self.view.center;

self.colorView.image  = [UIImageimageNamed:@"bg"];

[self.viewaddSubview:self.colorView];

[selfperformSelector:@selector(event)

withObject:nil

afterDelay:1.f];

}

- (void)event {

self.colorView.direction =DOWN;

self.colorView.color     = [UIColorcyanColor];

self.colorView.percent   =0.5;

}

@end

时间: 2024-10-12 02:10:42

CAGradientLayer功能的相关文章

将CAGradientLayer用作maskView的遮罩图层

说明 CAGradientLayer可以用作alpha遮罩,供maskView使用,这两种东西都是非常偏门的东西,但是,偏门不代表功能不强大,我们可以用CAGradientLayer制作出非常牛逼的动画效果,此博文,本人抛砖引玉简易介绍怎么将CAGradientLayer与maskView联系上.后续博文会陆续扩展并写出更好的控件. 只有完美的UI交互效果才能够为功能强大的app锦上添花,本人致力于研究分析苹果开发中那些巨牛逼但却无人问津的冷门特效. 效果图 源码 // // CAGradien

iOS 制作view渐变的效果CAGradientLayer

有时候我们需要在view中加入渐变的效果来让它看起来有玻璃质感,可以使用Core Animation框架中提供的CAGradientLayer来实现. 代码如下:首先添加QuartzCore.framework然后加入如下代码: #import <QuartzCore/QuartzCore.h> - (CAGradientLayer *)shadowAsInverse { CAGradientLayer *newShadow = [[[CAGradientLayer alloc] init] 

采用c#实现功能1

看了好多c#的菜鸟教程不如自己开始动手打代码,最终实现了功能一,参考了网上的wordcount代码发现无论是c++还是c#大部分采用的是哈希表的方法实现的,本来还想仅用循环实现遍历句子中的所有字符,即发现"  "就total++,但是考虑到功能二的单词数变得很多,这样做时间相对来说会慢一点,因此选择了hash表来实现功能.因为仅是一个句子,所以只需要将句子中的空格split就可以了,但在解决过程中我碰到的最大问题是C:\Users\dell-pc\Desktop\wcc\wcc\Int

微信公众平台的最新功能详细介绍与使用技巧!

近日微信官方发布消息,微信公众平台的操作进行了又一次"感天动地"的更新 且听我一一道来 本次主要重要改(Geng)革(Xin)凸显在三个地方 改(Geng)革(Xin)一:图文模版的收藏与使用 这,真的是一个超级实用的功能呀,那么如何使用呢?在哪里找呢? 首先告诉大家,如何收藏图文模板 选中编辑区的部分或者全部素材,然后点击添加模版,图文模板即可收藏成功: 当然,你还可以从外部进行粘贴和复制内容到图文模版. 那么,在哪里找到我收藏的模版呢?? 嗯,就在添加图文模版的旁边啦! 同时,你还

最新版勤哲Excel服务器V2016.12.0.292无限用户支持手机APP,微信,网页等功能不绑定电脑,任意安装,支持后续升级

最新版勤哲Excel服务器V2016.12.0.292无限用户支持手机APP,微信,网页等功能不绑定电脑,任意安装,支持后续升级. 这个版本发布过之后,再发布新的版本需要到下个月的中下旬,老朋友可以使用本版本后面延续升级 目前有大约127家用户在用,没有修改过注册授权文件,系统非常成熟,推荐指数为五星,QQ:619920289 麦枫论坛http://www.mfsun.com 简介 EXCEL服务器作为一款客户化.综合性管理软件,它通过Excel就能构造出您自主的管理系统:同时,她也可将您公司现

微信JS-SDK实现上传图片功能

最近在项目开放中,有一个在微信WEB项目中上传图片的需求,一开始使用了传统的<input type="file">的方式去实现,但是后面发现在使用这种传统模式时会由于手机系统的差异而导致一系列的问题,后改用微信JSSDK的方式来实现. 总的来说,利用JSSDK来实现该功能一共分为四步. 1. 调用wx.config(),初始化jssdk的配置,并在jsApiList中配置上传图片需要的四个api('chooseImage','previewImage','uploadIma

019 添加分区功能 - bos

一.基础调整 1.删除subarea.jsp中新增窗口的分区编码一行 2.修改Subarea.hbm.xml,主键生成策略为uuid 二.easyUI - combobox下拉框的使用 1.静态页面编写(并不实用) <select class="easyui-combobox"> <option>小黑</option> <option>小白</option> <option>小红</option> &l

集成Android免费语音合成功能(在线、离线、离在线融合)

集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离线)集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合) 转眼间,大半年没写文章了,没什么理由,就是人变懒了.囧~ 看标题,其实大家都被骗了,有这一篇文章还不够,我其实是打算分3篇文章来写的,如果合在一章里面就太长了,不过现在这个标题党横行的网络世界,我也被污染了,哈.那么为什么要分3篇文章来讲呢?看标题也能猜到了,就是在线.离线.离在线融合这3种语音合成方式,我将分别使

跟陈湾来完善C++(2), 添加属性功能

上面几篇文章中,我们添加了名称空间优化,添加事件功能.这些对我来说其实已经够了.但还可以加一个属性功能. 当我们在C++中更改一个属性时,平常都是Get函数加上Set函数,但是这样,没有直接写一个成员变量方便.例如: a.SetValue(a.GetValue() + 1); 没有 a.Value = a.Value + 1; 方便. 但是这种方便只有在调用有属性功能的对象时才能使用.在创建属性的时候我还是用老套路,写一个Get和Set函数,该干啥还是干啥.我的属性功能其实就是在类中添加一个共有