CAEmitterLayer 簡介
在iOS5.0中,Apple引入了CAEmitterLayer層,CAEmitterLayer是一個高性能的粒子效果引擎,被用來創建實時粒子動畫,如:煙霧,火,雨等效果。CAEmitterLayer其實是一個粒子容器,負責按照開發者的設定,成產出一個或者多個粒子樣式,然后將其模板化并大量生產。
實例:雪花效果
如果大家突然需要一個雪花效果,我相信大部分人的第一反應是使用定時器創建大量的ImageView對象,然后給每個ImageView對象添加動畫。這種做法一方面操作復雜,一方面性能方面堪憂.既然現在大家都了解了CAEmitterLayer引擎,因此下面使用CAEmitterLayer引擎實現這個效果,看下其的便捷性和性能方面的優勢。
1.創建一個CAEmitterLayer對象
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.frame = self.view.bounds;
[self.containerView.layer addSublayer:emitter];
emitter.renderMode = kCAEmitterLayerAdditive;
emitter.emitterPosition = CGPointMake(emitter.frame.size.width / 3.0, -75);
該layer的創建方式與基本CALayer層沒什么區別,區別在于屬性,下面將會簡要介紹:
- rederMode:控制著在視覺上粒子圖片是如何混合的。我們在實例中設置為了KCAEmitterLayerAdditive,它表示這:合并粒子重疊部分的亮度使其更加明亮,其他效果可以嘗試下。
- emitterPosition:表示粒子發射器的中心位置
注意:CAEmitterLayer的屬性控制著整個粒子系統的位置和形狀,一些屬性比如birthRate在粒子模板中也有。這些屬性會以相乘的方式作用在一起。
2.創建一個粒子模板
CAEmitterCell *cell = [[CAEmitterCell alloc] init];
cell.contents = (__bridge id)[UIImage imageNamed:@"面板_雪花"].CGImage;
cell.birthRate = 5;
cell.lifetime =7.0 ;
cell.alphaSpeed = 0;
cell.velocity = 150;
cell.velocityRange = 100;
cell.emissionLongitude = M_PI / 2;
cell.emissionRange = M_PI /2 ;
emitter.emitterCells = @[cell];
值得一提的屬性如下介紹:
- birthRate:表示粒子的生產速度,值越大,生產的速度越大
- lifetime:表示粒子的生命周期,在該范圍內,粒子不會消失(當然,透明度可能也會讓粒子顯示出消失的效果)
- alphaSpeed:粒子透明度的變化速度,為負值時說明透明度慢慢變低
- velocity:表示粒子的位移加速度
- velocityRange:表示粒子的位移加速范圍 與上一個參數配合使用
- emissionLongitude:粒子發射中心方向
- emissionRange:粒子發射范圍
其他配置
我們按照上面的方法創建兩個發射源,放在視圖的頂部,設置雪花飄落的范圍與方向,然后給視圖配置一個美感的背景圖,就可以實現一個雪花效果了。而且,我們做的工作其實很少,性能也有大大的提高。不多說,看效果