ios CAAnimation動畫實踐和SceneKit飛機小游戲

簡介

這篇主要介紹CAKeyframeAnimation關鍵幀動畫和CATransform3D的簡單使用惠豺,scenekit實現(xiàn)的飛機游戲在下一篇詳細介紹瘫辩。傳送門

先看看實現(xiàn)的動畫效果嵌灰,下面在逐個分析菠齿。git項目地址

總體效果圖.gif

動畫分析和實現(xiàn)

1. 搖錢樹

yqs.gif

這是我第一個app中的一個動畫,看到需求后一頭霧水骑疆,由于當時才接觸ios贿肩,簡直無從下手座哩,經(jīng)過各種百度后才找到一些頭緒苍凛。從監(jiān)聽手機震動趣席,到樹干搖晃,最后掉落元寶毫深,逐步理清了各個對象需要執(zhí)行的行為動作吩坝。下面我會貼一些代碼,具體的還請去項目中查看哑蔫,代碼注釋也寫得很詳細。
手機搖晃監(jiān)聽

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//系統(tǒng)震動
    
    [self ybAnimation];
    [self shakeYQS:yqsImage];
}

搖晃樹干

- (void)shakeYQS:(UIImageView *)view
{
    //表示以z坐標軸為中心軸旋轉(zhuǎn)
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];
    animation.values = @[@(0),@(-M_PI_4/2),@(0),@(M_PI_4/2),@(0),
                         @(-M_PI_4/3),@(0),@(M_PI_4/3),@(0),
                         @(-M_PI_4/4),@(0),@(M_PI_4/4),@(0),
                         @(-M_PI_4/5),@(0),@(M_PI_4/6),@(0)];//設置樹的搖晃幅度,分母變大表示搖晃幅度越來越小,不斷h衰減至0闸迷。
    animation.repeatCount = 1;
    animation.duration = 1;
    [view.layer addAnimation:animation forKey:@"shake"];
    
}

這里要理解keypath的意思嵌纲,從代碼中可以很直觀的看出監(jiān)聽的是z軸旋轉(zhuǎn)屬性,判斷旋轉(zhuǎn)方向可以用握手定則腥沽,用手握住坐標軸逮走,大拇指指向坐標軸方向,其余四指為旋轉(zhuǎn)的方向今阳,至于順逆時針师溅,需要視情況而定。

至于元寶掉落盾舌,就是簡單的一個平移動畫

//元寶掉落
- (void)ybAnimation
{
    for (int i = 0; i< ybArray.count; i++) {
        
        UIImageView * yb = ybArray[i];
        
        int x = rand()%215;
        int y = rand()%60 + 60;
        yb.frame = CGRectMake(x + MinX(yqsImage), y + MinY(yqsImage), yb.frame.size.width, yb.frame.size.height);
        
        yb.hidden = NO;
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position.y"];
        animation.delegate = self;
        animation.values = @[@(yb.frame.origin.y), @(yb.frame.origin.y+200)];
        
        float startTime = 0;
        
        animation.repeatCount = 1;
        
        float endTime = (float)(arc4random()%100) / 100 + 0.5;
        
        animation.keyTimes = @[@(startTime), @(endTime)];
        animation.duration = endTime;
        animation.fillMode = kCAFillModeForwards;
        animation.removedOnCompletion = NO;
        [animation setValue:@"ybDrop" forKey:@"ybAnimation"];
        [animation setValue:yb forKey:@"animationView"];
        [yb.layer addAnimation:animation forKey:@"ybAnimation"];
    }
}

其實拿到一個動畫需求后墓臭,首先要理清的就是整個動畫過程中,每個對象執(zhí)行了哪些行為妖谴。分析好后窿锉,然后就往基本動畫上套就行了,比如膝舅,平移嗡载,縮放,旋轉(zhuǎn)這些仍稀,再復雜點可能會加入路徑洼滚,3D場景變換等等,當然這些也需要一定的知識積累技潘。下面兩個簡單動畫判沟,我就不貼代碼了,只寫一些分析思路崭篡。

2. 唱片動畫

recordCD.gif

從圖中知道挪哄,唱針和唱片執(zhí)行的都是旋轉(zhuǎn)動畫,不同在于琉闪,唱針只旋轉(zhuǎn)了幾十度迹炼,而唱片卻是旋轉(zhuǎn)的360度,然后一直循環(huán)執(zhí)行颠毙。

3. 閃爍動畫

flashing.gif

這里中間的頭像在不斷放大縮小斯入,明顯頭像執(zhí)行的是縮放動畫。然后使用了貝塞爾曲線畫了兩個圈蛀蜜,一個靜止刻两,另一個在執(zhí)行一個組合動畫,即在擴大過程中滴某,顏色逐漸變淡磅摹。這里我模仿的是抖音直播時滋迈,頭像的閃爍動畫。

4. 扇形統(tǒng)計圖

sectorChart.gif

這個稍微復雜一點户誓,從畫出扇形饼灿,到動畫執(zhí)行,最后計算每個扇形的點擊范圍并做出偏移帝美。

首先碍彭,使用UIBezierPath和CAShapeLayer,畫出扇形悼潭。光畫出來還是比較簡單庇忌,然后是動畫執(zhí)行。怎樣才會產(chǎn)生上圖那種類似掃描的效果舰褪?先來看看圓形進度條動畫


progress1.gif

progress2.gif

想象一下皆疹,如果把邊界的寬度一點點擴大達到圓的半徑的長度,是不是就會出現(xiàn)扇形圖掃描一樣的動畫了抵知。

圖形畫好后墙基,還要判斷點擊范圍,這里采用的數(shù)學公式計算刷喜。首先判斷該點是否在圓內(nèi)残制,即點到圓心的距離是否大于半徑;然后是觸摸點跟圓心連成的直線和起始邊形成的夾角是在哪個扇形區(qū)域類掖疮,都能通過公式計算出來初茶。最后點擊扇形執(zhí)行偏移事件。(具體的計算公式請結(jié)合項目中的代碼查看理解)

5. 飛機游戲
飛機游戲的實現(xiàn)其實并不如想象中困難浊闪,主要基于SceneKit實現(xiàn)的恼布,SceneKit中封裝了很多對象,使其從建立模型到執(zhí)行動畫行為搁宾,操作起來都簡單易懂折汞,感覺比較適合做一些小游戲開發(fā)。我會在下一篇文章中寫出我的開發(fā)思路盖腿。傳送門

6. 使用View構造一個立方體

3DViewLayout.gif

這里主要使用了CATransform3D屬性爽待,該屬性封裝了layer層的3D旋轉(zhuǎn),平移翩腐,縮放等操作鸟款。這里通過對6個view的平移和旋轉(zhuǎn)實現(xiàn)的立方體顯示。

7. 視圖的3d旋轉(zhuǎn)

dragAndRotateView.gif

用Pan手勢實現(xiàn)的茂卦,手指拖動圖片時計算出向量坐標何什,然后通過CATransform3DRotate來實現(xiàn)旋轉(zhuǎn)。主要邏輯代碼就幾行等龙,詳細注釋請在項目查看处渣。

完結(jié)

感興趣的可以去項目地址下載下來看看伶贰。git項目地址

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霍比,隨后出現(xiàn)的幾起案子幕袱,更是在濱河造成了極大的恐慌暴备,老刑警劉巖悠瞬,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涯捻,居然都是意外死亡浅妆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門障癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凌外,“玉大人,你說我怎么就攤上這事涛浙】导” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵轿亮,是天一觀的道長疮薇。 經(jīng)常有香客問我,道長我注,這世上最難降的妖魔是什么按咒? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮但骨,結(jié)果婚禮上励七,老公的妹妹穿的比我還像新娘。我一直安慰自己奔缠,他們只是感情好掠抬,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著校哎,像睡著了一般两波。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贬蛙,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天雨女,我揣著相機與錄音,去河邊找鬼阳准。 笑死氛堕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的野蝇。 我是一名探鬼主播讼稚,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼括儒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锐想?” 一聲冷哼從身側(cè)響起帮寻,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赠摇,沒想到半個月后固逗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡藕帜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年烫罩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洽故。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡贝攒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出时甚,到底是詐尸還是另有隱情隘弊,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布荒适,位于F島的核電站梨熙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吻贿。R本人自食惡果不足惜串结,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舅列。 院中可真熱鬧肌割,春花似錦、人聲如沸帐要。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榨惠。三九已至奋早,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赠橙,已是汗流浹背耽装。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留期揪,地道東北人掉奄。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像凤薛,于是被迫代替她去往敵國和親姓建。 傳聞我的和親對象是個殘疾皇子诞仓,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件速兔、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,033評論 4 62
  • 冰心先生說:“童年墅拭,是夢中的真,是真中的夢涣狗,是回憶時含淚的微笑谍婉。” 六一兒童節(jié)屑柔,孩子們盼望已久的節(jié)日屡萤,今天孩子們過...
    王翠連閱讀 149評論 0 1
  • 今天和孩子玩了一回角色扮演珍剑。有時候掸宛,別人(熟人)跟她打招呼,她的表情很奇怪招拙,噘嘴加翻白眼唧瘾,因為她每天接觸很多陌生人...
    曾萍萍閱讀 164評論 0 0
  • 知道要過年了饰序,5歲的小朋友異常興奮,一直問:什么時候過年规哪?還有幾天求豫?得到答案也不滿意。隔天醒來就問:今天就過年了嗎...
    九月露水閱讀 285評論 1 8
  • 歡迎來到小于的王者地盤服爷,小于已經(jīng)更新了王者峽谷73位英雄全新的推薦出裝以及銘文搭配杜恰,大家關注小于之后只需回復英雄名...
    王者小于幫閱讀 212評論 0 2