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

粒子發(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);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內(nèi)容