iOS動(dòng)畫——viewAnimation

又給自己挖了一個(gè)坑,我很喜歡動(dòng)畫不錯(cuò)荣挨,但是寫出來又是另外一個(gè)問題了~~~

這一篇我們來說說UIKit中的動(dòng)畫API,其中包括:

UIView.UIView.animateWithDuration

UIView.transitionWithView

UIView.animateKeyframesWithDuration

UIView.addKeyframeWithRelativeStartTime

今天的故事就將圍繞這些API展開,闡述他的前世今生饰及。

UIKit動(dòng)畫API使用起來十分簡(jiǎn)單與方便龙助,他避免了Core Animation的復(fù)雜性砰奕,雖然事實(shí)上UIKit動(dòng)畫API的底層使用的也是Core Animation。

來看第一個(gè)提鸟,UIView.UIView.animateWithDuration

先來看一下函數(shù)原型:

? ?class func animateWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, usingSpringWithDamping dampingRatio: CGFloat, initialSpringVelocity velocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)

一共七個(gè)參數(shù):

duration

表示動(dòng)畫執(zhí)行時(shí)間军援。

delay

動(dòng)畫延遲時(shí)間。

usingSpringWithDamping

表示彈性屬性沽一。

initialSpringVelocity

初速度盖溺。

options

可選項(xiàng),一些可選的動(dòng)畫效果铣缠,包括重復(fù)等烘嘱。

animations

表示執(zhí)行的動(dòng)畫內(nèi)容昆禽,包括透明度的漸變,移動(dòng)蝇庭,縮放醉鳖。

completion

表示執(zhí)行完動(dòng)畫后執(zhí)行的內(nèi)容。

關(guān)于這些參數(shù)哮内,選一個(gè)例子盗棵,嘗試不同的參數(shù),這樣可以更好的理解每個(gè)參數(shù)的意義北发。

再來看一下UIView.transitionWithView,這是一個(gè)過度動(dòng)畫纹因,主要用于UIView進(jìn)入或者離開視圖。

先看一下這一個(gè)動(dòng)畫效果吧:


其中banner右移消失的動(dòng)畫用的就是上面提到的UIView.UIView.animateWithDuration琳拨,而進(jìn)入的動(dòng)畫用的就是現(xiàn)在要講的UIView.transitionWithView瞭恰。很像一頁書頁翻下來的感覺哈。

我們來看一下函數(shù)原型

? ? class func transitionWithView(view: UIView, duration: NSTimeInterval, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)

一共五個(gè)參數(shù):

view

這當(dāng)然就是指定要進(jìn)行動(dòng)畫的對(duì)象了狱庇。

duration

和上面一樣這個(gè)參數(shù)指定動(dòng)畫時(shí)間長(zhǎng)短惊畏。

options

這是一個(gè)可選參數(shù),雖然是可選的但是不填這個(gè)API就沒意義了密任,因?yàn)閁IView如何進(jìn)入視圖就是由這個(gè)參數(shù)決定颜启。到底是像書頁一樣翻進(jìn)去,還是像百葉窗一樣轉(zhuǎn)動(dòng)就是由這個(gè)參數(shù)決定浪讳,具體有哪些可以選擇缰盏,點(diǎn)進(jìn)去看看就知道了。

animations

這個(gè)選項(xiàng)你可以將它理解為在動(dòng)畫結(jié)束后UIView的形態(tài)驻债。

completion

動(dòng)畫結(jié)束后運(yùn)行的代碼乳规。

代碼大概長(zhǎng)這樣

UIView.transitionWithView(status, duration: 0.33, options:

? ? ? ? ? ? .CurveEaseOut | .TransitionCurlDown, animations: {

? ? ? ? ? ? ? ? self.yourView.hidden = false

? ? ? ? ? ? }, completion:nil

? ? ? ? })

到最后一個(gè)函數(shù)啦啦,UIView.animateKeyframesWithDuration合呐。動(dòng)畫效果如下:


我們很容易就可以發(fā)現(xiàn)暮的,這個(gè)動(dòng)畫分了很多階段完成,我們當(dāng)然可以用我們提到的第一個(gè)函數(shù)UIView.UIView.animateWithDuration來完成淌实,但是冻辩,你不覺得嵌套加嵌套顯得很不好看嗎,我們當(dāng)然還有更好的方法來實(shí)現(xiàn)拆祈,就是我們現(xiàn)在要說的恨闪,先來看一下函數(shù)原型:

class func animateKeyframesWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, options: UIViewKeyframeAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)

一共五個(gè)參數(shù):

duration:整個(gè)動(dòng)畫過程的時(shí)間。

delay:延遲多久開始放坏。

options:可選項(xiàng)咙咽,比如說重復(fù),倒著來一遍等效果淤年,自己都試試看吧钧敞。

animations:需要執(zhí)行的動(dòng)畫蜡豹,里面可以是多個(gè)UIView.addKeyframeWithRelativeStartTime。

至于這個(gè)UIView.addKeyframeWithRelativeStartTime方法溉苛,類似于我們提到的第一個(gè)UIView.UIView.animateWithDuration镜廉,也是一個(gè)屬性漸變的方法,不過這個(gè)方法只能寫在他的爸爸 UIView.animateKeyframesWithDuration的animation參數(shù)函數(shù)塊中愚战。

completion:動(dòng)畫執(zhí)行結(jié)束之后執(zhí)行的代碼娇唯。

來看一下我們實(shí)現(xiàn)這個(gè)小飛機(jī)~飛啊飛~~的代碼:

let originalCenter = planeImage.center

? ? ? ? UIView.animateKeyframesWithDuration(1.5, delay: 0.0, options: .Repeat, animations: {

? ? ? ? ? ? //add keyframes

? ? ? ? ? ? UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.25, animations: {

? ? ? ? ? ? ? ? self.planeImage.center.x += 80.0

? ? ? ? ? ? ? ? self.planeImage.center.y -= 10.0

? ? ? ? ? ? })

? ? ? ? ? ? UIView.addKeyframeWithRelativeStartTime(0.1, relativeDuration: 0.4) {

? ? ? ? ? ? ? ? self.planeImage.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_4/2))

? ? ? ? ? ? }

? ? ? ? ? ? UIView.addKeyframeWithRelativeStartTime(0.25, relativeDuration: 0.25) {

? ? ? ? ? ? ? ? self.planeImage.center.x += 100.0

? ? ? ? ? ? ? ? self.planeImage.center.y -= 50.0

? ? ? ? ? ? ? ? self.planeImage.alpha = 0.0

? ? ? ? ? ? }

? ? ? ? ? ? UIView.addKeyframeWithRelativeStartTime(0.51, relativeDuration: 0.01) {

? ? ? ? ? ? ? ? self.planeImage.transform = CGAffineTransformIdentity

? ? ? ? ? ? ? ? self.planeImage.center = CGPoint(x: 0.0, y: originalCenter.y)

? ? ? ? ? ? }

? ? ? ? ? ? UIView.addKeyframeWithRelativeStartTime(0.55, relativeDuration: 0.45) {

? ? ? ? ? ? ? ? self.planeImage.alpha = 1.0

? ? ? ? ? ? ? ? self.planeImage.center = originalCenter

? ? ? ? ? ? }

? ? ? ? ? ? }, completion:nil)

事實(shí)告訴我們動(dòng)畫是要靠設(shè)計(jì)的,你看我上面的動(dòng)畫抽的一筆寂玲,但事實(shí)上用同樣的代碼可以寫出很漂亮的動(dòng)畫塔插。

?文/StrongX(簡(jiǎn)書作者)

原文鏈接:http://www.reibang.com/p/bd7bf438b288

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敢茁,隨后出現(xiàn)的幾起案子佑淀,更是在濱河造成了極大的恐慌留美,老刑警劉巖彰檬,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谎砾,居然都是意外死亡逢倍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門景图,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较雕,“玉大人,你說我怎么就攤上這事挚币×两” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妆毕,是天一觀的道長(zhǎng)慎玖。 經(jīng)常有香客問我,道長(zhǎng)笛粘,這世上最難降的妖魔是什么趁怔? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮薪前,結(jié)果婚禮上润努,老公的妹妹穿的比我還像新娘。我一直安慰自己示括,他們只是感情好铺浇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垛膝,像睡著了一般鳍侣。 火紅的嫁衣襯著肌膚如雪裁着。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天拱她,我揣著相機(jī)與錄音二驰,去河邊找鬼。 笑死秉沼,一個(gè)胖子當(dāng)著我的面吹牛桶雀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唬复,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼矗积,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了敞咧?” 一聲冷哼從身側(cè)響起棘捣,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎休建,沒想到半個(gè)月后乍恐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡测砂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年茵烈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砌些。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呜投,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出存璃,到底是詐尸還是另有隱情仑荐,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布纵东,位于F島的核電站粘招,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏篮迎。R本人自食惡果不足惜男图,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甜橱。 院中可真熱鬧逊笆,春花似錦、人聲如沸岂傲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乃戈,卻和暖如春褂痰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背症虑。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工缩歪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谍憔。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓匪蝙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親习贫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逛球,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • 在iOS實(shí)際開發(fā)中常用的動(dòng)畫無非是以下四種:UIView動(dòng)畫,核心動(dòng)畫苫昌,幀動(dòng)畫颤绕,自定義轉(zhuǎn)場(chǎng)動(dòng)畫。 1.UIView...
    請(qǐng)叫我周小帥閱讀 3,082評(píng)論 1 23
  • 先看看CAAnimation動(dòng)畫的繼承結(jié)構(gòu) CAAnimation{ CAPropertyAnimation { ...
    時(shí)間不會(huì)倒著走閱讀 1,644評(píng)論 0 1
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果祟身,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜奥务,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,471評(píng)論 6 30
  • 動(dòng)畫的繼承結(jié)構(gòu) CAAnimation{CAPropertyAnimation{CABasicAnimation{...
    早起的蟲兒子被鳥吃閱讀 877評(píng)論 0 1
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果月而,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜汗洒,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,104評(píng)論 5 13