iOS 中CAEmitterLayer、 CAGradientL
粒子发送器
CAEmitterLayer :发送器
- birthRate : 每秒发送粒子的数量
- emitterMode: 发送的样式:
- kCAEmitterLayerPoints //点(默认)
- kCAEmitterLayerOutline//线
- kCAEmitterLayerSurfack//面
- kCAEmitterLayerVolume//团
- renderMode
- kCAEmitterLayerOldestFirst 最后的出生的粒子 在第一个
- kCAEmitterLayerOldestLast 最后的出生的粒子 在最后面
- kCAEmitterLayerBackToFront 把后面的 放到上面
- kCAEmitterLayerAdditive 叠加
- emitterShape:发送形状的样式
- kCAEmitterLayerPoint 点
- kCAEmitterLayerLine 线
- kCAEmitterLayerRectangle 矩形
- kCAEmitterLayerCuboid 立方体
- kCAEmitterLayerCircle 曲线
- kCAEmitterLayerSphere 圆形
CAEmitterCell :表示粒子
- contents:粒子的内容
- lifetime:存活时间
- lifetimeRange:存活时间的范围
- birthRate:每秒粒子生成的数量
- emissionLatitude:散发的纬度(方向)——>弧度——>上下
- emissionLongitude: 散发的经度(方向)——>弧度——>左右
- velocity:发送的速度——>速度越快越远
- velocityRange:发送速度的范围
- xAcceleration; X轴的加速度
- yAcceleration;Y轴的加速度
- zAcceleration;Z轴的加速度
- smissionRange:散发的范围——>弧度——>范围
- name :粒子的名字 ——>可以通过粒子的名字 找到粒子
使用:
CAEmitterLayer 对象定义为属性 使用懒加载
-(CAEmitterLayer *)emitterLayer{
if (_emitterLayer) {
return _emitterLayer;
}
_emitterLayer = [[CAEmitterLayer alloc]init];
[self.view.layer addSublayer:_emitterLayer];
return _emitterLayer;
}
对self. emitterLayer 进行设置
- (void)viewDidLoad {
[super viewDidLoad];
self.emitterLayer.frame = CGRectMake(0 ,100,500,500);
self.view.backgroundColor = [UIColor blackColor];
// 设置粒子发送器 每秒钟发送的数量
self.emitterLayer.birthRate = 1;
// self.emitterLayer.emitterPosition 中心点
self.emitterLayer.position = CGPointMake(500,700);
self.emitterLayer.emitterShape = kCAEmitterLayerCircle;
// 设置粒子发送器的样式
self.emitterLayer.renderMode = kCAEmitterLayerOldestLast;
self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
NSMutableArray *array = [[NSMutableArray alloc]init];
for (int i=0; i<3; i++) {
CAEmitterCell *cell3 = [CAEmitterCell emitterCell];
cell3.contents = (id)[UIImage imageNamed:[NSString stringWithFormat:@"花瓣%d",i+1]].CGImage;
// 粒子出生量
cell3.birthRate = 1;
// 存活时间->单位秒
cell3.lifetime = 5;
cell3.lifetimeRange = 2;
// 发送速度
cell3.velocity = 50;
cell3.velocityRange = 100;
// 粒子发送的方向
cell3.emissionLatitude = 50*(i+1)*M_PI/180;
// 发送的加速度
cell3.yAcceleration = -50;
// 散发粒子的范围 - 弧度
cell3.emissionRange = 200;
// 把粒子的cell 放到粒子发送器上
[array addObject:cell3];
}
self.emitterLayer.emitterCells = array;
UIImageView *View = [[UIImageView alloc]initWithFrame:self.view.frame];
View.center = CGPointMake(200,550);
View.contentMode = UIViewContentModeScaleAspectFit;
View.image = [UIImage imageNamed:@"花"];
[self.view addSubview:View];
}
渐变图层
CAGradientLayer、
- clolors:渐变颜色的数组——>id->CGColor
- locations:颜色渐变的百分比 数组
- startPoint 颜色渐变的起始点
- endPoint 颜色渐变的终点
- 颜色会根据设置的两个点去变化
创建渐变图层对象
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = self.view.frame;
//图层的透明度
layer.opacity = 0.5;
//设置图层颜色渐变的开始点
layer.startPoint = CGPointMake(0, 0);
//设置图层颜色渐变的结束点
layer.endPoint = CGPointMake(1,1);
//颜色渐变的百分比 数组
layer.locations = @[@0.2,@0.6];
//渐变颜色的数组 数组不接受的CGColor类型 强转成id类型的
layer.colors = @[(id)[UIColor greenColor].CGColor,(id)[UIColor whiteColor].CGColor,(id)[UIColor cyanColor].CGColor,];
[self.view.layer addSublayer:layer];
```
##复制图层
###CAReplicatorLayer
- CALayer 必须重写 layerClass 把原CALayer 修改成 CAReplicatorLayer
//必须重写layerClas 的方法
-
(Class)layerClass{
return [CAReplicatorLayer class];
}
***** 如果没有重写 layerClass 的方法 运行程序会崩溃 报错原因如下
'NSInvalidArgumentException', reason: '-[CALayer setInstanceCount:]: unrecognized selector sent to instance 0x7f9f207a2040'
CanReplicatorView *view = [[CanReplicatorView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:view];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.image = [UIImage imageNamed:@"花瓣2"];
[view addSubview:imageView];
CAReplicatorLayer *layer = (CAReplicatorLayer *)view.layer;
// 现在实例化出来layer 的数量
layer.instanceCount = 2;
// 改变复制图层样式
layer.instanceTransform = CATransform3DMakeTranslation(40, 400,100);