iOS動畫-2

#pragma mark------iOS動畫

- (void)initAnimation{

/*-----------組動畫CAAnimationGroup--------*/

/*

CAAnimation的子類铆遭,可以保存一組動畫對象竹祷,將CAAnimationGroup對象加入層后藏杖,組中所有動畫對象可以同時并發(fā)運行。

重要屬性

animations: 用來保存一組動畫對象的NSArray

*/

//? ? UIView* animationView = [[UIView alloc]init];

//? ? [self.view addSubview:animationView];

//? ? animationView.backgroundColor = [UIColor yellowColor];

//? ? animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-25, 50, 50);

//

//? ? CAKeyframeAnimation* keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

//? ? NSValue* value1 = [NSValue valueWithCGPoint:CGPointMake(0, screenHeight/2-50)];

//? ? NSValue* value2 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3, screenHeight/2-50)];

//? ? NSValue* value3 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3, screenHeight/2+50)];

//? ? NSValue* value4 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3*2, screenHeight/2+50)];

//? ? NSValue* value5 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3*2, screenHeight/2-50)];

//? ? NSValue* value6 = [NSValue valueWithCGPoint:CGPointMake(screenWidth, screenHeight/2-50)];

//? ? keyFrameAnimation.values = [NSArray arrayWithObjects:value1,value2,value3,value4,value5,value6, nil];

//

//? ? //縮放動畫

//? ? CABasicAnimation* basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

//? ? basicAnimation.fromValue = [NSNumber numberWithFloat:0.1f];

//? ? basicAnimation.toValue = [NSNumber numberWithFloat:2.0f];

//

//? ? //旋轉(zhuǎn)動畫

//? ? CABasicAnimation* rotAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

//? ? rotAnimation.toValue = [NSNumber numberWithFloat:4*M_PI];

//

//? ? //組動畫

//? ? CAAnimationGroup* groupAnimation = [CAAnimationGroup animation];

//? ? groupAnimation.animations = [NSArray arrayWithObjects:keyFrameAnimation,basicAnimation,rotAnimation, nil];

//? ? groupAnimation.duration = 8.0f;

//? ? [animationView.layer addAnimation:groupAnimation forKey:@"groupAnimation"];

/*----------------------過渡動畫CATransition------------------------------------------------*/

/*CATransition的子類,用于做過渡動畫或者轉(zhuǎn)場動畫团滥,能夠為層提供移出屏幕和移入屏幕的動畫效果

重要屬性:type:動畫過渡類型

Apple官方的SDK其實只提供了四種過渡效果

kCATransitionFade 漸變效果

kCATransitionMoveIn 進入覆蓋效果

kCATransitionPush 推出效果

kCATransitionReveal 揭露離開效果

subtype:動畫過渡方向

kCATransitionFromRight 從右側(cè)進入

kCATransitionFromLeft 從左側(cè)進入

kCATransitionFromTop 從頂部進入

kCATransitionFromBottom 從底部進入

startProgress:動畫起點(在整體動畫的百分比)

endProgress:動畫終點(在整體動畫的百分比)

*/

/*煙花效果??? 使用的是一種比較特殊的動畫---粒子動畫*/

/*

一個粒子系統(tǒng)一般有兩部分組成

1.CAEmitterCell:可以看作是單個粒子的原型颓影,如:一個單一的粉撲在一團煙霧。當散發(fā)出一個粒子盾鳞,UIKit根據(jù)這個發(fā)射粒子和定義的基礎(chǔ)上創(chuàng)建一個隨機粒子犬性。此原型包括一些屬性來控制粒子的圖片,顏色腾仅、方向仔夺、運動,縮放比例和生命周期

2.CAEmitterLayer:主要控制發(fā)射源的位置攒砖、尺寸、發(fā)射模式日裙、發(fā)射源的形狀等等吹艇。他是一個高性能的粒子引擎,被用來創(chuàng)建復雜的粒子動畫如:煙霧昂拂、火受神、雨等效果,并且很好的控制了性能

CAEmitterLayer就像大炮格侯,決定了(1)哪里發(fā)射(2)大炮有多大

CAEmitterCell就像是炮彈鼻听,覺得了(1)初速度(2)加速度(3)炮彈類型(4)發(fā)射后的角度 等等

首先提醒CAEmitterLayer本身沒有什么難度,主要在于兩點:

屬性較多(一會會把屬性都列舉出來联四,不知道了隨時查閱就是)

調(diào)參數(shù)比較費時(想要有好的動畫效果還得慢慢的去調(diào)整各項參數(shù)撑碴,不過沒有難度就是有點費時間)

平常用的多的比如 emitterShape 的 kCAEmitterLayerLine 和 kCAEmitterLayerPoint。這兩個從視覺上還是比較好區(qū)分的朝墩,這決定了你的粒子是從一個點「噴」出來的醉拓,還是從一條線上每個點「噴」下來,前者像焰火收苏,后者像瀑布亿卤。顯然,下雪的效果更像后者鹿霸。

emitterMode 的 kCAEmitterLayerOutline 表示向外圍擴散排吴,如果你的發(fā)射源形狀是 circle,那么 kCAEmitterLayerOutline 就會以一個圓的方式向外擴散開懦鼠。

又比如你想表達一股蒸汽向上噴的效果钻哩,就可以設置 emitterShape 為 kCAEmitterLayerLine , emitterMode 為 kCAEmitterLayerOutline葛闷。

CAEmitterCell(炮彈)的屬性

其實CAEmitterCell真是的名字叫粒子

3.

*/

/*總結(jié)--任何復雜的動畫都是有一個個簡單的動畫組裝的憋槐,只要我們善于分解和組裝,就能實現(xiàn)滿意的效果*/

/*一些常用的animationWithKeyPath值的總結(jié)

值 說明 使用形式

transform.scale 比例轉(zhuǎn)化 @(0.8)

transform.scale.x 寬的比例 @(0.8)

transform.scale.y 高的比例 @(0.8)

transform.rotation.x 圍繞x軸旋轉(zhuǎn) @(M_PI)

transform.rotation.y 圍繞y軸旋轉(zhuǎn) @(M_PI)

transform.rotation.z 圍繞z軸旋轉(zhuǎn) @(M_PI)

cornerRadius 圓角的設置 @(50)

backgroundColor 背景顏色的變化 (id)[UIColor purpleColor].CGColor

bounds 大小淑趾,中心不變 [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];

position 位置(中心點的改變) [NSValue valueWithCGPoint:CGPointMake(300, 300)];

contents 內(nèi)容阳仔,比如UIImageView的圖片 imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage;

opacity 透明度 @(0.7)

contentsRect.size.width 橫向拉伸縮放 @(0.4)最好是0~1之間的

*/

/*---------背景顏色--------透明度-----------*/

//? ? ? ? UIView* animationView = [[UIView alloc]init];

//? ? ? ? [self.view addSubview:animationView];

//? ? ? ? animationView.backgroundColor = [UIColor blueColor];

//? ? ? ? animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-25, 50, 50);

//

//? ? ? ? CABasicAnimation* backgroudColor = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];//背景色

//? ? ? ? backgroudColor.fromValue = (id)[UIColor redColor].CGColor;

//? ? ? ? backgroudColor.toValue = (id)[UIColor yellowColor].CGColor;

//

//? ? ? ? CABasicAnimation* viewAplha = [CABasicAnimation animationWithKeyPath:@"opacity"];//透明度

//? ? ? ? viewAplha.fromValue = @(0.1);

//? ? ? viewAplha.toValue = @(0.7);

//

//? ? ? ? //組動畫

//? ? ? ? CAAnimationGroup* groupAnimation = [CAAnimationGroup animation];

//? ? ? ? groupAnimation.animations = [NSArray arrayWithObjects:backgroudColor,viewAplha, nil];

//? ? ? ? groupAnimation.duration = 8.0f;

//? ? ? ? [animationView.layer addAnimation:groupAnimation forKey:@"groupAnimation"];

//

/*-----------------------------粒子動畫-----------------------------------------------*/

CAEmitterLayer* snowEmitter = [CAEmitterLayer layer];//創(chuàng)建一個CAEmitterLayer--也就是大炮

snowEmitter.emitterPosition = CGPointMake(80, 180);//指定發(fā)射源的位置

snowEmitter.masksToBounds = NO;//不修改邊界

//? ? snowEmitter.emitterSize = CGSizeMake(snowEmitter.frame.size.width/2.0, snowEmitter.frame.size.height/2.0);//指定發(fā)射源的大小

snowEmitter.emitterSize = CGSizeMake(screenWidth, screenHeight/2.0);//指定發(fā)射源的大小(也就是炮彈出現(xiàn)的區(qū)域)

snowEmitter.emitterShape = kCAEmitterLayerRectangle;//發(fā)射源的形狀kCAEmitterLayerLine//kCAEmitterLayerCircle

snowEmitter.emitterMode = kCAEmitterLayerOutline;//發(fā)射源的模式

snowEmitter.contents =(id)[UIImage imageNamed:@"icon_payment@2x"].CGImage;

CAEmitterCell* snowFlake = [CAEmitterCell emitterCell];//創(chuàng)建CAEmitterCell

snowFlake.birthRate = 10.0;//每秒多少個

snowFlake.lifetime = 50.0;//存活時間

snowFlake.velocity = 10;//因為動畫屬于落體效果,所以我們只需要設置他在y方向上的加速度就行了近范。

snowFlake.velocityRange = 8;//初速度范圍

snowFlake.yAcceleration = 20;//y方向的加速度

snowFlake.xAcceleration = 20;

snowFlake.alphaSpeed = -0.4;

snowFlake.emissionRange = 8*M_PI;//以錐形分布開的發(fā)射角度嘶摊。角度用弧度制。粒子均勻分布在這個錐形范圍內(nèi)评矩。

snowFlake.contents = (id)[UIImage imageNamed:@"icon_payment@2x"].CGImage;//cell的內(nèi)容叶堆。通常是一個指針CGImageRef。

//? ? snowFlake.contents = (id)[UIColor redColor].CGColor;

snowFlake.scale = 0.5;//縮小

snowFlake.emissionLatitude = M_PI_2;//發(fā)射角度

snowFlake.color = [UIColor redColor].CGColor;

snowEmitter.emitterCells = [NSArray arrayWithObject:snowFlake];

[self.view.layer addSublayer:snowEmitter];//把粒子動畫所添加的視圖

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斥杜,一起剝皮案震驚了整個濱河市虱颗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔗喂,老刑警劉巖忘渔,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缰儿,居然都是意外死亡畦粮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門乖阵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宣赔,“玉大人,你說我怎么就攤上這事瞪浸∪褰” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵对蒲,是天一觀的道長椅棺。 經(jīng)常有香客問我,道長齐蔽,這世上最難降的妖魔是什么两疚? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮含滴,結(jié)果婚禮上诱渤,老公的妹妹穿的比我還像新娘。我一直安慰自己谈况,他們只是感情好勺美,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碑韵,像睡著了一般赡茸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祝闻,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天占卧,我揣著相機與錄音,去河邊找鬼。 笑死华蜒,一個胖子當著我的面吹牛辙纬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叭喜,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼贺拣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捂蕴?” 一聲冷哼從身側(cè)響起譬涡,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啥辨,沒想到半個月后昂儒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡委可,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腊嗡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片着倾。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖燕少,靈堂內(nèi)的尸體忽然破棺而出卡者,到底是詐尸還是另有隱情,我是刑警寧澤客们,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布崇决,位于F島的核電站,受9級特大地震影響底挫,放射性物質(zhì)發(fā)生泄漏恒傻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一建邓、第九天 我趴在偏房一處隱蔽的房頂上張望盈厘。 院中可真熱鬧,春花似錦官边、人聲如沸沸手。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽契吉。三九已至,卻和暖如春诡渴,著一層夾襖步出監(jiān)牢的瞬間捐晶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留租悄,地道東北人谨究。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像泣棋,于是被迫代替她去往敵國和親胶哲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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