iOS 動(dòng)畫(huà) —— 禮花效果實(shí)例詳細(xì)
CAEmitterLayer 提供了一個(gè)基于 Core Animation 的粒子發(fā)射系統(tǒng),使用它可以實(shí)現(xiàn)各種各樣的粒子動(dòng)畫(huà)效果。此處的禮花效果,就是基于 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è)過(guò)程
*/
CAEmitterCell* rocket = [CAEmitterCell emitterCell];
rocket.birthRate = 1.0; //是每秒某個(gè)點(diǎn)產(chǎn)生的effectCell數(shù)量
rocket.emissionRange = 0.25 * M_PI; // 周?chē)l(fā)射角度
rocket.velocity = 400; // 速度
rocket.velocityRange = 100; // 速度范圍
rocket.yAcceleration = 75; // 粒子y方向的加速度分量
rocket.lifetime = 1.02; // effectCell的生命周期,既在屏幕上的顯示時(shí)間要多長(zhǎng)。
// 下面是對(duì) 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)角度范圍
/**
* 添加爆炸的效果,突然之間變大一下的感覺(jué)
*/
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é)合起來(lái)
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í)也可以說(shuō)它是裝載CAEmitterCell的容器, 有一個(gè)屬性emitterCells, 將CAEmitterCell直接添加到該數(shù)組中, 即可實(shí)現(xiàn)粒子效果啦。
// 可能用到是屬性
* birthRate:粒子產(chǎn)生系數(shù),默認(rèn)1.0;
* emitterCells: 裝著CAEmitterCell對(duì)象的數(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用來(lái)表示一個(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的對(duì)象,既粒子要展現(xiàn)的圖片;
* contentsRect:應(yīng)該畫(huà)在contents里的子rectangle:
* emissionLatitude:發(fā)射的z軸方向的角度
* emissionLongitude:x-y平面的發(fā)射方向
* emissionRange;周?chē)l(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方向的加速度分量
感覺(jué)CAEmitterLayer 是一個(gè)很有意思的東東,目前先把基本知識(shí)點(diǎn)筆記在此,還是需要不斷的實(shí)戰(zhàn)經(jīng)驗(yàn)方能更好的運(yùn)用它。
備注參考:http://www.dbjr.com.cn/article/93043.htm
文/天空中的球(簡(jiǎn)書(shū)作者)
原文鏈接:http://www.jianshu.com/p/08cbe521afe5
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書(shū)作者”。
- IOS 多線程GCD詳解
- IOS 粒子系統(tǒng) (CAEmitterLayer)實(shí)例詳解
- iOS 屏幕解鎖文字動(dòng)畫(huà)效果
- IOS 波紋進(jìn)度(waveProgress)動(dòng)畫(huà)實(shí)現(xiàn)
- iOS 利用動(dòng)畫(huà)和貝塞爾實(shí)現(xiàn)咻咻效果
- iOS漸變圓環(huán)旋轉(zhuǎn)動(dòng)畫(huà)CAShapeLayer CAGradientLayer
- IOS 圓球沿著橢圓軌跡做動(dòng)畫(huà)
- IOS 實(shí)現(xiàn)3D 浮動(dòng)效果動(dòng)畫(huà)
- iOS 雷達(dá)效果實(shí)例詳解
- iOS 引導(dǎo)頁(yè)的鏤空效果實(shí)例
- IOS 應(yīng)用之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞詳解
相關(guān)文章
iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法
在iOS編程中UILabel是一個(gè)常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
iOS自帶文本轉(zhuǎn)語(yǔ)音技術(shù)(TTS)的實(shí)現(xiàn)即語(yǔ)音播報(bào)的實(shí)踐
這篇文章主要介紹了iOS自帶文本轉(zhuǎn)語(yǔ)音技術(shù)(TTS)的實(shí)現(xiàn)即語(yǔ)音播報(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-09
IOS 開(kāi)發(fā)之UISearchBar 詳解及實(shí)例
這篇文章主要介紹了IOS 開(kāi)發(fā)之UISearchBar 詳解及實(shí)例的相關(guān)資料,主要介紹 IOS UISearchBar的使用,附有實(shí)例代碼,需要的朋友可以參考下2016-12-12
iOS應(yīng)用中使用Toolbar工具欄方式切換視圖的方法詳解
這篇文章主要介紹了iOS應(yīng)用中使用Toolbar工具欄方式切換視圖的方法,文中講解了UIToolbar的相關(guān)編寫(xiě)以及使用xib方式創(chuàng)建可切換視圖程序的例子,需要的朋友可以參考下2016-04-04
iOS中tableview 兩級(jí)cell的展開(kāi)與收回的示例代碼
本篇文章主要介紹了iOS中tableview 兩級(jí)cell的展開(kāi)與收回的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
iOS優(yōu)雅的將CALayer旋轉(zhuǎn)360度示例代碼
CALayer我們又稱它叫做層,CALayer類的概念與UIView非常類似,并且可以包含圖片、文本、背景色等。下面這篇文章主要給大家介紹了關(guān)于iOS如何優(yōu)雅的將CALayer旋轉(zhuǎn)360度的相關(guān)資料,文中通過(guò)示例代碼的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2018-01-01
IOS開(kāi)發(fā)使用KeychainItemWrapper 持久存儲(chǔ)用戶名和密碼
這篇文章主要介紹了IOS開(kāi)發(fā)使用KeychainItemWrapper 持久存儲(chǔ)用戶名和密碼的相關(guān)資料,需要的朋友可以參考下2015-11-11
iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法
這篇文章主要介紹了iOS 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07

