iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
一、CAEmitterLayer
CAEmitterLayer是CoreAnimation框架中的粒子发射层,在以前的一片博客中有详细的介绍和范例,这里不再重复,地址如下:
粒子效果的应用和火焰范例:http://my.oschina.net/u/2340880/blog/485095
二、CAGradientLayer
CAGradientLayer是用于色彩梯度展示的layer图层,通过CAGradientLayer,我们可以很轻松的创建出有过渡效果的色彩图。其中属性如下:
/*
颜色数组,设置我们需要过的的颜色,必须是CGColor对象
*/
@property(nullable, copy) NSArray *colors;
/*
颜色开始进行过渡的位置
这个数组中的元素是NSNumber类型,单调递增的,并且在0——1之间
例如,如果我们设置两个颜色进行过渡,这个数组中写入0.5,则第一个颜色会在达到layer一半的时候开始向第二个颜色过渡
*/
@property(nullable, copy) NSArray<NSNumber *> *locations;
/*
下面两个参数用于设置渲染颜色的起点和终点 取值范围均为0——1
默认起点为(0.5 ,0) 终点为(0.5 ,1),颜色的过渡范围就是沿y轴从上向下
*/
@property CGPoint startPoint;
@property CGPoint endPoint;
/*
渲染风格 iOS中只支持一种默认的kCAGradientLayerAxial,我们无需手动设置
*/
@property(copy) NSString *type;
用如下代码创建一个度过视图的效果:
CAGradientLayer * layer = [CAGradientLayer layer];
layer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor blueColor].CGColor,(id)[UIColor greenColor].CGColor];
layer.locations = @[@0.1,@0.7,@1];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.position = CGPointMake(100, 100);
layer.startPoint = CGPointMake(0, 0);
layer.endPoint = CGPointMake(1, 1);
[self.view.layer addSublayer:layer];
效果如下:
三、CAReplicatorLayer
CAReplocatorLayer是拷贝视图容器,我们可以通过它,将其中的子layer进行拷贝,并进行一些差异处理,其中常用属性方法如下:
//拷贝的次数
@property NSInteger instanceCount;
//是否开启景深效果
@property BOOL preservesDepth;
//当CAReplicatorLayer的子Layer层进行动画的时候,拷贝的副本执行动画的延时
@property CFTimeInterval instanceDelay;
//拷贝副本的3D变换
@property CATransform3D instanceTransform;
//拷贝副本的颜色变换
@property(nullable) CGColorRef instanceColor;
//每个拷贝副本的颜色偏移参数
@property float instanceRedOffset;
@property float instanceGreenOffset;
@property float instanceBlueOffset;
//每个拷贝副本的透明度偏移参数
@property float instanceAlphaOffset;
例如,通过拷贝一个色块,使其产生平移排列:
CAReplicatorLayer *reLayer = [CAReplicatorLayer layer];
reLayer.position = CGPointMake(0, 0);
CALayer * layer= [CALayer layer];
[reLayer addSublayer:layer];
[self.view.layer addSublayer:reLayer];
layer.bounds = CGRectMake(0, 0, 20, 20);
layer.position = CGPointMake(30, 100);
layer.backgroundColor = [UIColor redColor].CGColor;
//每个副本向右平移25px
reLayer.instanceTransform=CATransform3DMakeTranslation(25, 0, 0);
//如果进行动画,副本延时一秒执行
reLayer.instanceDelay = 1;
//拷贝十个副本
reLayer.instanceCount = 10;
效果如下: