iOS 動畫 —— 禮花效果實(shí)例詳細(xì)
CAEmitterLayer 提供了一個(gè)基于 Core Animation 的粒子發(fā)射系統(tǒng),使用它可以實(shí)現(xiàn)各種各樣的粒子動畫效果。此處的禮花效果,就是基于 CAEmitterLayer 的。
fire.gif
- (void)viewDidLoad { [super viewDidLoad]; [self makeFireworksDisplay]; } - (void)makeFireworksDisplay { // 粒子發(fā)射系統(tǒng) 的初始化 CAEmitterLayer *fireworksEmitter = [CAEmitterLayer layer]; CGRect viewBounds = self.view.layer.bounds; // 發(fā)射源的位置 fireworksEmitter.emitterPosition = CGPointMake(viewBounds.size.width/2.0, viewBounds.size.height); // 發(fā)射源尺寸大小 fireworksEmitter.emitterSize = CGSizeMake(viewBounds.size.width/2.0, 0.0); // 發(fā)射模式 fireworksEmitter.emitterMode = kCAEmitterLayerOutline; // 發(fā)射源的形狀 fireworksEmitter.emitterShape = kCAEmitterLayerLine; // 發(fā)射源的渲染模式 fireworksEmitter.renderMode = kCAEmitterLayerAdditive; // 發(fā)射源初始化隨機(jī)數(shù)產(chǎn)生的種子 fireworksEmitter.seed = (arc4random()%100)+1; /** * 添加發(fā)射點(diǎn) 一個(gè)圓(發(fā)射點(diǎn))從底下發(fā)射到上面的一個(gè)過程 */ CAEmitterCell* rocket = [CAEmitterCell emitterCell]; rocket.birthRate = 1.0; //是每秒某個(gè)點(diǎn)產(chǎn)生的effectCell數(shù)量 rocket.emissionRange = 0.25 * M_PI; // 周圍發(fā)射角度 rocket.velocity = 400; // 速度 rocket.velocityRange = 100; // 速度范圍 rocket.yAcceleration = 75; // 粒子y方向的加速度分量 rocket.lifetime = 1.02; // effectCell的生命周期,既在屏幕上的顯示時(shí)間要多長。 // 下面是對 rocket 中的內(nèi)容,顏色,大小的設(shè)置 rocket.contents = (id) [[UIImage imageNamed:@"circle"] CGImage]; rocket.scale = 0.2; rocket.color = [[UIColor redColor] CGColor]; rocket.greenRange = 1.0; rocket.redRange = 1.0; rocket.blueRange = 1.0; rocket.spinRange = M_PI; // 子旋轉(zhuǎn)角度范圍 /** * 添加爆炸的效果,突然之間變大一下的感覺 */ CAEmitterCell* burst = [CAEmitterCell emitterCell]; burst.birthRate = 1.0; burst.velocity = 0; burst.scale = 2.5; burst.redSpeed =-1.5; burst.blueSpeed =+1.5; burst.greenSpeed =+1.0; burst.lifetime = 0.35; /** * 添加星星擴(kuò)散的粒子 */ CAEmitterCell* spark = [CAEmitterCell emitterCell]; spark.birthRate = 400; spark.velocity = 125; spark.emissionRange = 2* M_PI; spark.yAcceleration = 75; //粒子y方向的加速度分量 spark.lifetime = 3; spark.contents = (id) [[UIImage imageNamed:@"star"] CGImage]; spark.scaleSpeed =-0.2; spark.greenSpeed =-0.1; spark.redSpeed = 0.4; spark.blueSpeed =-0.1; spark.alphaSpeed =-0.25; // 例子透明度的改變速度 spark.spin = 2* M_PI; // 子旋轉(zhuǎn)角度 spark.spinRange = 2* M_PI; // 將 CAEmitterLayer 和 CAEmitterCell 結(jié)合起來 fireworksEmitter.emitterCells = [NSArray arrayWithObject:rocket]; //在圈圈粒子的基礎(chǔ)上添加爆炸粒子 rocket.emitterCells = [NSArray arrayWithObject:burst]; //在爆炸粒子的基礎(chǔ)上添加星星粒子 burst.emitterCells = [NSArray arrayWithObject:spark]; // 添加到圖層上 [self.view.layer addSublayer:fireworksEmitter]; }
CAEmitterLayer
CAEmitterLayer是QuartzCore提供的粒子引擎, 可用于制作美觀的粒子特效。其實(shí)也可以說它是裝載CAEmitterCell的容器, 有一個(gè)屬性emitterCells, 將CAEmitterCell直接添加到該數(shù)組中, 即可實(shí)現(xiàn)粒子效果啦。
// 可能用到是屬性
* birthRate:粒子產(chǎn)生系數(shù),默認(rèn)1.0;
* emitterCells: 裝著CAEmitterCell對象的數(shù)組,被用于把粒子投放到layer上;
* emitterDepth:決定粒子形狀的深度聯(lián)系:emittershape
* emitterMode:發(fā)射模式
* emitterPosition:發(fā)射位置
* emitterShape:發(fā)射源的形狀;
* emitterSize:發(fā)射源的尺寸大;
* emitterZposition:發(fā)射源的z坐標(biāo)位置;
* lifetime:粒子生命周期
* preservesDepth:不是多很清楚(粒子是平展在層上)
* renderMode:渲染模式:
* scale:粒子的縮放比例:
* seed:用于初始化隨機(jī)數(shù)產(chǎn)生的種子
* spin:自旋轉(zhuǎn)速度
* velocity:粒子速度
CAEmitterCell
CAEmitterCell用來表示一個(gè)個(gè)的粒子, 它有一系列的參數(shù)用于設(shè)置效果。
// 可能用到的屬性
* birthRate 這個(gè)必須要設(shè)置,具體含義是每秒某個(gè)點(diǎn)產(chǎn)生的effectCell數(shù)量
* alphaRange: 一個(gè)粒子的顏色alpha能改變的范圍;
* alphaSpeed:粒子透明度在生命周期內(nèi)的改變速度;
* blueRange:一個(gè)粒子的顏色blue 能改變的范圍;
* blueSpeed: 粒子blue在生命周期內(nèi)的改變速度;
* color:粒子的顏色
* contents:是個(gè)CGImageRef的對象,既粒子要展現(xiàn)的圖片;
* contentsRect:應(yīng)該畫在contents里的子rectangle:
* emissionLatitude:發(fā)射的z軸方向的角度
* emissionLongitude:x-y平面的發(fā)射方向
* emissionRange;周圍發(fā)射角度
* emitterCells:粒子發(fā)射的粒子
* enabled:粒子是否被渲染
* greenrange: 一個(gè)粒子的顏色green 能改變的范圍;
* greenSpeed: 粒子green在生命周期內(nèi)的改變速度;
* lifetime:生命周期
* lifetimeRange:生命周期范圍
* magnificationFilter:不是很清楚好像增加自己的大小
* minificatonFilter:減小自己的大小
* minificationFilterBias:減小大小的因子
* name:粒子的名字
* redRange:一個(gè)粒子的顏色red 能改變的范圍;
* redSpeed; 粒子red在生命周期內(nèi)的改變速度;
* scale:縮放比例:
* scaleRange:縮放比例范圍;
* scaleSpeed:縮放比例速度:
* spin:子旋轉(zhuǎn)角度
* spinrange:子旋轉(zhuǎn)角度范圍
* style:不是很清楚:
* velocity:速度
* velocityRange:速度范圍
* xAcceleration:粒子x方向的加速度分量
* yAcceleration:粒子y方向的加速度分量
* zAcceleration:粒子z方向的加速度分量
感覺CAEmitterLayer 是一個(gè)很有意思的東東,目前先把基本知識點(diǎn)筆記在此,還是需要不斷的實(shí)戰(zhàn)經(jīng)驗(yàn)方能更好的運(yùn)用它。
備注參考:http://www.dbjr.com.cn/article/93043.htm
文/天空中的球(簡書作者)
原文鏈接:http://www.jianshu.com/p/08cbe521afe5
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。
- IOS 多線程GCD詳解
- IOS 粒子系統(tǒng) (CAEmitterLayer)實(shí)例詳解
- iOS 屏幕解鎖文字動畫效果
- IOS 波紋進(jìn)度(waveProgress)動畫實(shí)現(xiàn)
- iOS 利用動畫和貝塞爾實(shí)現(xiàn)咻咻效果
- iOS漸變圓環(huán)旋轉(zhuǎn)動畫CAShapeLayer CAGradientLayer
- IOS 圓球沿著橢圓軌跡做動畫
- IOS 實(shí)現(xiàn)3D 浮動效果動畫
- iOS 雷達(dá)效果實(shí)例詳解
- iOS 引導(dǎo)頁的鏤空效果實(shí)例
- IOS 應(yīng)用之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞詳解
相關(guān)文章
iOS動態(tài)調(diào)整UILabel高度的幾種方法
在iOS編程中UILabel是一個(gè)常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動態(tài)調(diào)整UILabel高度的幾種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12iOS自帶文本轉(zhuǎn)語音技術(shù)(TTS)的實(shí)現(xiàn)即語音播報(bào)的實(shí)踐
這篇文章主要介紹了iOS自帶文本轉(zhuǎn)語音技術(shù)(TTS)的實(shí)現(xiàn)即語音播報(bào)的實(shí)踐,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09一個(gè)iOS上的秒表小應(yīng)用的實(shí)現(xiàn)方法分享
這篇文章主要介紹了一個(gè)iOS上的秒表小應(yīng)用的實(shí)現(xiàn)方法分享,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-10-10學(xué)習(xí)iOS自定義導(dǎo)航控制器UINavigationController
這篇文章主要為大家詳細(xì)介紹了iOS自定義導(dǎo)航控制器UINavigationController,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09IOS 開發(fā)之UISearchBar 詳解及實(shí)例
這篇文章主要介紹了IOS 開發(fā)之UISearchBar 詳解及實(shí)例的相關(guān)資料,主要介紹 IOS UISearchBar的使用,附有實(shí)例代碼,需要的朋友可以參考下2016-12-12iOS應(yīng)用中使用Toolbar工具欄方式切換視圖的方法詳解
這篇文章主要介紹了iOS應(yīng)用中使用Toolbar工具欄方式切換視圖的方法,文中講解了UIToolbar的相關(guān)編寫以及使用xib方式創(chuàng)建可切換視圖程序的例子,需要的朋友可以參考下2016-04-04iOS中tableview 兩級cell的展開與收回的示例代碼
本篇文章主要介紹了iOS中tableview 兩級cell的展開與收回的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03iOS優(yōu)雅的將CALayer旋轉(zhuǎn)360度示例代碼
CALayer我們又稱它叫做層,CALayer類的概念與UIView非常類似,并且可以包含圖片、文本、背景色等。下面這篇文章主要給大家介紹了關(guān)于iOS如何優(yōu)雅的將CALayer旋轉(zhuǎn)360度的相關(guān)資料,文中通過示例代碼的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2018-01-01IOS開發(fā)使用KeychainItemWrapper 持久存儲用戶名和密碼
這篇文章主要介紹了IOS開發(fā)使用KeychainItemWrapper 持久存儲用戶名和密碼的相關(guān)資料,需要的朋友可以參考下2015-11-11iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法
這篇文章主要介紹了iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07