粒子發(fā)送器
CAEmitterLayer :發(fā)送器
- birthRate : 每秒發(fā)送粒子的數(shù)量
- emitterMode: 發(fā)送的樣式:
- kCAEmitterLayerPoints //點(默認)
- kCAEmitterLayerOutline//線
- kCAEmitterLayerSurfack//面
- kCAEmitterLayerVolume//團
- renderMode
- kCAEmitterLayerOldestFirst 最后的出生的粒子 在第一個
- kCAEmitterLayerOldestLast 最后的出生的粒子 在最后面
- kCAEmitterLayerBackToFront 把后面的 放到上面
- kCAEmitterLayerAdditive 疊加
- emitterShape:發(fā)送形狀的樣式
- kCAEmitterLayerPoint 點
- kCAEmitterLayerLine 線
- kCAEmitterLayerRectangle 矩形
- kCAEmitterLayerCuboid 立方體
- kCAEmitterLayerCircle 曲線
- kCAEmitterLayerSphere 圓形
CAEmitterCell :表示粒子
- contents:粒子的內(nèi)容
- lifetime:存活時間
- lifetimeRange:存活時間的范圍
- birthRate:每秒粒子生成的數(shù)量
- emissionLatitude:散發(fā)的緯度(方向)——>弧度——>上下
- emissionLongitude: 散發(fā)的經(jīng)度(方向)——>弧度——>左右
- velocity:發(fā)送的速度——>速度越快越遠
- velocityRange:發(fā)送速度的范圍
- xAcceleration; X軸的加速度
- yAcceleration;Y軸的加速度
- zAcceleration;Z軸的加速度
- smissionRange:散發(fā)的范圍——>弧度——>范圍
- name :粒子的名字 ——>可以通過粒子的名字 找到粒子
使用:
CAEmitterLayer 對象定義為屬性 使用懶加載
-(CAEmitterLayer *)emitterLayer{
if (_emitterLayer) {
return _emitterLayer;
}
_emitterLayer = [[CAEmitterLayer alloc]init];
[self.view.layer addSublayer:_emitterLayer];
return _emitterLayer;
}
對self. emitterLayer 進行設(shè)置
- (void)viewDidLoad {
[super viewDidLoad];
self.emitterLayer.frame = CGRectMake(0 ,100,500,500);
self.view.backgroundColor = [UIColor blackColor];
// 設(shè)置粒子發(fā)送器 每秒鐘發(fā)送的數(shù)量
self.emitterLayer.birthRate = 1;
// self.emitterLayer.emitterPosition 中心點
self.emitterLayer.position = CGPointMake(500,700);
self.emitterLayer.emitterShape = kCAEmitterLayerCircle;
// 設(shè)置粒子發(fā)送器的樣式
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;
// 發(fā)送速度
cell3.velocity = 50;
cell3.velocityRange = 100;
// 粒子發(fā)送的方向
cell3.emissionLatitude = 50*(i+1)*M_PI/180;
// 發(fā)送的加速度
cell3.yAcceleration = -50;
// 散發(fā)粒子的范圍 - 弧度
cell3.emissionRange = 200;
// 把粒子的cell 放到粒子發(fā)送器上
[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:漸變顏色的數(shù)組——>id->CGColor
- locations:顏色漸變的百分比 數(shù)組
- startPoint 顏色漸變的起始點
- endPoint 顏色漸變的終點
- 顏色會根據(jù)設(shè)置的兩個點去變化
創(chuàng)建漸變圖層對象
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = self.view.frame;
//圖層的透明度
layer.opacity = 0.5;
//設(shè)置圖層顏色漸變的開始點
layer.startPoint = CGPointMake(0, 0);
//設(shè)置圖層顏色漸變的結(jié)束點
layer.endPoint = CGPointMake(1,1);
//顏色漸變的百分比 數(shù)組
layer.locations = @[@0.2,@0.6];
//漸變顏色的數(shù)組 數(shù)組不接受的CGColor類型 強轉(zhuǎn)成id類型的
layer.colors = @[(id)[UIColor greenColor].CGColor,(id)[UIColor whiteColor].CGColor,(id)[UIColor cyanColor].CGColor,];
[self.view.layer addSublayer:layer];
```
##復(fù)制圖層
###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;
// 現(xiàn)在實例化出來layer 的數(shù)量
layer.instanceCount = 2;
// 改變復(fù)制圖層樣式
layer.instanceTransform = CATransform3DMakeTranslation(40, 400,100);