iOS之CALayer的CAEmitterLayer实现“红包雨”效果
生活随笔
收集整理的這篇文章主要介紹了
iOS之CALayer的CAEmitterLayer实现“红包雨”效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CAEmitterLayer(粒子發生器)
一、基本簡介
- CAEmitterLayer是CALayer的一個子類,和CAEmitterCell一起使用可以創造出多樣的動畫效果。
- CAEmitterLayer主要用于實現基于Core Animation的粒子發生器系統。
- 在粒子系統中,CAEmitterLayer負責發射粒子(當然粒子也可以發射粒子),而這些所謂的粒子,就是CAEmitterCell,我們可以將CAEmitterLayer比作是CAEmitterCell的容器,它會按照你的設置來以不同的樣式不斷產生粒子,也就是CAEmitterCell。
- CAEmitterLayer決定了粒子從什么樣的幾何特性上發射出來,這個幾何特性包括了位置,形狀,大小。另外還有一些渲染相關的特性。另外的一些屬性是CAEmitterLayer和CAEmiiterCell都有的,CAEmitterLayer的這些屬性會作為CAEmitterCell相同屬性的系數。
- CAEmitterCell則決定了粒子自身的一些特征,例如速度,加速度,發射的范圍,顏色等等。這些屬性大多是以“中間值”配合一個范圍值的方式來表示的。
二、CAEmitterLayer的屬性
CAEmitterLayer類提供了一個粒子發射器系統為核心的動畫。這些粒子是由CAEmitterCell組成的實例,它相當于一個管理者,來管理 CAEmitterCell的發射的一些細節,比如發射的位置,發射形狀等。
| emitterPosition | 發射位置 |
| emitterSize | 發射源的大小 |
| emitterMode | 發射模式 |
| emitterShape | 發射源的形狀 |
| renderMode | 渲染模式 |
| birthRate | 粒子產生系數,默認1.0 |
| emitterCells | 裝著CAEmitterCell對象的數組,被用于把粒子投放到layer上 |
| emitterDepth | 決定粒子形狀的深度聯系 |
| emitterZposition | 發射源的z坐標位置 |
| lifetime | 粒子生命周期 |
| scale | 粒子的縮放比例 |
| seed | 用于初始化隨機數產生的種子 |
| spin | 自旋轉速度 |
| velocity | 粒子速度 |
三、CAEmitterCell 的屬性
CAEmitterCell是粒子發射系統里的粒子,用CAEmitterCell來定義你所需要的粒子的樣式,圖片,顏色,方向,運動,縮放比例和生命周期等。
| alphaRange | 一個粒子的顏色alpha能改變的范圍 |
| alphaSpeed | 粒子透明度在生命周期內的改變速度 |
| birthrate | 每秒發射的粒子數量 |
| blueRange | 一個粒子的顏色blue 能改變的范圍 |
| blueSpeed | 粒子blue在生命周期內的改變速度 |
| color | 粒子的顏色 |
| contents | 是個CGImageRef的對象,既粒子要展現的圖片 |
| contentsRect | 應該畫在contents里的子rectangle |
| emissionLatitude | 發射的z軸方向的角度 |
| emissionLongitude | x-y平面的發射方向 |
| emissionRange | 周圍發射角度 |
| emitterCells | 粒子發射的粒子的數組 |
| enabled | 粒子是否被渲染 |
| greenrange | 一個粒子的顏色green 能改變的范圍 |
| greenSpeed | 粒子green在生命周期內的改變速度 |
| lifetime | 生命周期 |
| lifetimeRange | 生命周期范圍 lifetime= lifetime(+/-) lifetimeRange |
| magnificationFilter | 增加自己的大小 |
| minificatonFilter | 減小自己的大小 |
| minificationFilterBias | 減小大小的因子 |
| name | 粒子的名字 |
| redRange | 一個粒子的顏色red 能改變的范圍 |
| redSpeed | 粒子red在生命周期內的改變速度 |
| scale | 縮放比例 |
| scaleRange | 縮放比例范圍 |
| scaleSpeed | 縮放比例速度 |
| spin | 子旋轉角度 |
| spinrange | 子旋轉角度范圍 |
| velocity | 速度 |
| velocityRange | 速度范圍 |
| xAcceleration | 粒子x方向的加速度分量 |
| yAcceleration | 粒子y方向的加速度分量 |
| zAcceleration | 粒子z方向的加速度分量 |
“紅包雨”的實現
// 設置CAEmitterLayerself.rainLayer = [CAEmitterLayer layer];// 降落區域的方位self.rainLayer.frame = self.view.bounds;// 在背景圖上添加粒子圖層[self.view.layer addSublayer:self.rainLayer];// 發射形狀:線性self.rainLayer.emitterShape = kCAEmitterLayerLine;self.rainLayer.emitterMode = kCAEmitterLayerSurface;// 指定發射源的大小self.rainLayer.emitterSize = self.view.frame.size;// 指定發射源的位置self.rainLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, -10);// 配置cellCAEmitterCell * snowCell = [CAEmitterCell emitterCell];snowCell.contents = (id)[[UIImage imageNamed:@"hongbao.png"] CGImage];// 每秒多少個snowCell.birthRate = 1.0;// 存活時間snowCell.lifetime = 30;// 運動速度snowCell.speed = 2;// 初速度,因為動畫屬于落體效果,只需要設置它在y方向上的加速度snowCell.velocity = 10.f;// 初速度范圍snowCell.velocityRange = 10.f;// y軸方向的加速度snowCell.yAcceleration = 60;// 圖片縮放比例snowCell.scale = 0.05;snowCell.scaleRange = 0.f;// 開始動畫:添加到圖層上self.rainLayer.emitterCells = @[snowCell];- 效果展示
完整示例傳送門
CAEmitterLayer之實現“紅包雨”效果
總結
以上是生活随笔為你收集整理的iOS之CALayer的CAEmitterLayer实现“红包雨”效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL ES之GLKit索引绘制“
- 下一篇: iOS逆向之深入解析MachO文件