iOS 中CAEmitterLayer、 CAGradientLayer 、CAReplicatorLayer 的基本使用

粒子發(fā)送器

CAEmitterLayer :發(fā)送器

  • birthRate : 每秒發(fā)送粒子的數(shù)量
  • emitterMode: 發(fā)送的樣式:
    • kCAEmitterLayerPoints //點(diǎn)(默認(rèn))
    • kCAEmitterLayerOutline//線
    • kCAEmitterLayerSurfack//面
    • kCAEmitterLayerVolume//團(tuán)
  • renderMode
    • kCAEmitterLayerOldestFirst 最后的出生的粒子 在第一個(gè)
    • kCAEmitterLayerOldestLast 最后的出生的粒子 在最后面
    • kCAEmitterLayerBackToFront 把后面的 放到上面
    • kCAEmitterLayerAdditive 疊加
  • emitterShape:發(fā)送形狀的樣式
    • kCAEmitterLayerPoint 點(diǎn)
    • kCAEmitterLayerLine 線
    • kCAEmitterLayerRectangle 矩形
    • kCAEmitterLayerCuboid 立方體
    • kCAEmitterLayerCircle 曲線
    • kCAEmitterLayerSphere 圓形

CAEmitterCell :表示粒子

  • contents:粒子的內(nèi)容
  • lifetime:存活時(shí)間
  • lifetimeRange:存活時(shí)間的范圍
  • birthRate:每秒粒子生成的數(shù)量
  • emissionLatitude:散發(fā)的緯度(方向)——>弧度——>上下
  • emissionLongitude: 散發(fā)的經(jīng)度(方向)——>弧度——>左右
  • velocity:發(fā)送的速度——>速度越快越遠(yuǎn)
  • velocityRange:發(fā)送速度的范圍
  • xAcceleration; X軸的加速度
  • yAcceleration;Y軸的加速度
  • zAcceleration;Z軸的加速度
  • smissionRange:散發(fā)的范圍——>弧度——>范圍
  • name :粒子的名字 ——>可以通過粒子的名字 找到粒子

使用:

CAEmitterLayer 對(duì)象定義為屬性 使用懶加載

-(CAEmitterLayer *)emitterLayer{
    if (_emitterLayer) {
        return _emitterLayer;
    }
    _emitterLayer = [[CAEmitterLayer alloc]init];
    [self.view.layer addSublayer:_emitterLayer];
    return _emitterLayer;
}

對(duì)self. emitterLayer 進(jìn)行設(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 中心點(diǎn)
    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;
        //    存活時(shí)間->單位秒
        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 顏色漸變的起始點(diǎn)
  • endPoint 顏色漸變的終點(diǎn)
  • 顏色會(huì)根據(jù)設(shè)置的兩個(gè)點(diǎn)去變化
創(chuàng)建漸變圖層對(duì)象
  CAGradientLayer *layer = [CAGradientLayer layer];
  layer.frame = self.view.frame;
  //圖層的透明度
  layer.opacity = 0.5;
  //設(shè)置圖層顏色漸變的開始點(diǎn)
  layer.startPoint = CGPointMake(0, 0);
  //設(shè)置圖層顏色漸變的結(jié)束點(diǎn)
  layer.endPoint = CGPointMake(1,1);
  //顏色漸變的百分比 數(shù)組
  layer.locations = @[@0.2,@0.6];
  //漸變顏色的數(shù)組 數(shù)組不接受的CGColor類型 強(qiáng)轉(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 的方法 運(yùn)行程序會(huì)崩潰 報(bào)錯(cuò)原因如下

'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)在實(shí)例化出來layer 的數(shù)量
layer.instanceCount = 2;
// 改變復(fù)制圖層樣式
layer.instanceTransform = CATransform3DMakeTranslation(40, 400,100);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容