iOS中的動(dòng)畫(huà)

核心動(dòng)畫(huà) coreAnimation

核心動(dòng)畫(huà) coreAnimation 框架是基于OpenGL 與 CoreGraphics 圖片處理框架的一個(gè)跨平臺(tái)的動(dòng)畫(huà) 框架

在CoreAnimation中大部分的動(dòng)畫(huà)都是通過(guò)Layer層來(lái)實(shí)現(xiàn)的,通過(guò)CALayer,我們可以組織復(fù)雜的層級(jí)結(jié)構(gòu)奖唯。

在核心動(dòng)畫(huà)中撤嫩,大多數(shù)的動(dòng)畫(huà)效果是添加在圖層屬性的變化上晨继,例如请毛,改變圖層的位置,大小恨搓,顏色部逮,元半徑

layer層 并不決定試圖的展現(xiàn)娜汁,它只是儲(chǔ)存了試圖的集合屬性的狀態(tài)

    let moveAnimation = CABasicAnimation(keyPath: "position.y")
    // 這個(gè)動(dòng)畫(huà)的時(shí)長(zhǎng)
    moveAnimation.duration = 0.8
    // 動(dòng)畫(huà)的起始位置和終點(diǎn)位置
    
    moveAnimation.fromValue = center.y
    moveAnimation.toValue = center.x - 30
    // 一個(gè)時(shí)間函數(shù) 表示怎樣的運(yùn)行方式
    
    moveAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
    
    // 重復(fù)次數(shù)
    
    moveAnimation.repeatCount = 2
    
    // 重復(fù)的時(shí)長(zhǎng)
    moveAnimation.repeatDuration = 2
    // 是否在動(dòng)畫(huà)結(jié)束后移除
    moveAnimation.isRemovedOnCompletion = false
    moveAnimation.fillMode = kCAFillModeForwards
    
    // 添加這個(gè)動(dòng)畫(huà) 后面可以拿到這個(gè)動(dòng)畫(huà)標(biāo)識(shí)
    // 第二個(gè)參數(shù) 是后面可以根據(jù)這個(gè)動(dòng)畫(huà)標(biāo)識(shí)拿到這個(gè)動(dòng)畫(huà)
    self.layer.add(moveAnimation, forKey: "moveAnimation")
1674919-9b97fd4af8b5a09b.png

動(dòng)畫(huà)的過(guò)程說(shuō)明

  1. 伴隨著動(dòng)畫(huà)進(jìn)行,在動(dòng)畫(huà)時(shí)間內(nèi)兄朋,keyPath 相應(yīng)的屬性值fromValue 漸漸的變成toValue
  2. keyPath 內(nèi)容是calayer 的可動(dòng)畫(huà)animation屬性
    3.如果fillMode=kCAFillModeForwards同時(shí)removedOnComletion=NO掐禁,那么在動(dòng)畫(huà)執(zhí)行完畢后,圖層會(huì)保持顯示動(dòng)畫(huà)執(zhí)行后的狀態(tài)颅和。但在實(shí)質(zhì)上傅事,圖層的屬性值還是動(dòng)畫(huà)執(zhí)行前的初始值,并沒(méi)有真正被改變

現(xiàn)在來(lái)說(shuō)CAAnimations 中代理方法< CAAnimationDelegate >
-animationDidStart: 開(kāi)始時(shí)調(diào)用
-animationDidStop:finish 結(jié)束時(shí)調(diào)用

addAnimation:forKey:方法中峡扩,也可以給這個(gè)動(dòng)畫(huà)設(shè)置一個(gè)鍵蹭越,可以在其他地方取出來(lái),進(jìn)行一些操作教届,比如刪除般又,也充分體現(xiàn)了kvc的靈活性

CAKeyFrameAnimation-關(guān)鍵幀動(dòng)畫(huà)

關(guān)鍵幀動(dòng)畫(huà) 也是CAPropertyAnimation的子類

如果是簡(jiǎn)單的動(dòng)畫(huà) CABasicAnimation就能滿足,關(guān)鍵幀動(dòng)畫(huà)彌補(bǔ)了基本動(dòng)畫(huà)只能傳入對(duì)應(yīng)值的不足巍佑,關(guān)鍵幀動(dòng)畫(huà)支持傳入一套數(shù)值或者路徑來(lái)完成動(dòng)畫(huà)

與CABasicAnimation的區(qū)別
CABasicAnimation只能從一個(gè)值變成兩外一個(gè)數(shù)值
CAKeyFrameAnimation: 會(huì)使用NSArray保存這些數(shù)值

 var bezierPath = UIBezierPath(arcCenter: CGPoint(x:100, y:100), radius: 50, startAngle: 0, endAngle: 0, clockwise: true)
    let animation = CAKeyframeAnimation(keyPath: "transform.rotation")
    // 上文提到的 幀動(dòng)畫(huà)數(shù)組 在約定的時(shí)間內(nèi) 完成這些動(dòng)畫(huà)
    let arr = [M_PI_4, -M_PI_4,M_PI_4]
    animation.values = arr
    
    animation.rotationMode = kCAAnimationRotateAuto // 方向
    animation.duration = 3; // 動(dòng)畫(huà)時(shí)長(zhǎng)
    animation.keyTimes = [0.2,0.8,1]
    animation.path = bezierPath.cgPath
    animation.repeatCount = 2 // 重復(fù)次數(shù)
    self.layer.add(animation, forKey: nil)

value: 動(dòng)畫(huà)對(duì)象會(huì)在指定事件內(nèi),一次顯示values數(shù)組中的每一個(gè)關(guān)鍵幀

path:可以設(shè)置一個(gè)CGPathRef,CGMutablePathRef,讓圖層按照路徑軌跡移動(dòng)寄悯。path只對(duì)calayer和anchorPoint和position作用萤衰,如果設(shè)置了path 那么value將被忽略

keyTime: 對(duì)應(yīng)的關(guān)鍵幀指定對(duì)應(yīng)的時(shí)間點(diǎn),如果沒(méi)有設(shè)置keyTimes 各個(gè)關(guān)鍵幀時(shí)間是平分的

CAAnimationGroup-動(dòng)畫(huà)組

動(dòng)畫(huà)組猜旬,是caanimation的子類脆栋,可以保存一組動(dòng)畫(huà)對(duì)象,將CAAnimationGroup對(duì)象加入層后洒擦,組中雖有動(dòng)畫(huà)對(duì)象可以同時(shí)并發(fā)運(yùn)行

轉(zhuǎn)場(chǎng)動(dòng)畫(huà)

 // 轉(zhuǎn)場(chǎng)動(dòng)畫(huà)
    let caTransition = CATransition()
    caTransition.duration = 0.2
    caTransition.delegate = self
    caTransition.timingFunction = CAMediaTimingFunction(name: "easeInEaseOut")
    caTransition.type = kCATransitionReveal // 動(dòng)畫(huà)風(fēng)格
    caTransition.subtype = kCATransitionFromLeft // 動(dòng)畫(huà)方向

type: 動(dòng)畫(huà)過(guò)渡類型

subType: 動(dòng)畫(huà)過(guò)渡方向

CALyer

UIView和CALayer的關(guān)系 - 平行關(guān)系

每個(gè)UIView都有一個(gè)CALayer實(shí)例的圖層屬性椿争。
視圖的職責(zé)就是創(chuàng)建并管理這個(gè)圖層。
UIView和CALyer有著平行的層級(jí)關(guān)系熟嫩,職責(zé)分離秦踪。

UIView的高級(jí)API可以實(shí)現(xiàn)一些簡(jiǎn)單的動(dòng)畫(huà)效果,但更多的細(xì)節(jié)和底層還需要通過(guò)CALayer直接處理CAAnimation來(lái)處理。

UIView能實(shí)現(xiàn)但CALayer不能實(shí)現(xiàn)
1.處理觸摸事件
UIView沒(méi)有暴露出來(lái)的CALayer的功能
1.陰影椅邓、圓角柠逞、帶顏色的邊框
2.3D變換
3.非矩形范圍
4.透明覆蓋
5.多級(jí)非線性動(dòng)畫(huà)

參考 http://www.reibang.com/p/a53611d7eda5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市景馁,隨后出現(xiàn)的幾起案子板壮,更是在濱河造成了極大的恐慌,老刑警劉巖合住,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰精,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡透葛,警方通過(guò)查閱死者的電腦和手機(jī)笨使,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)获洲,“玉大人阱表,你說(shuō)我怎么就攤上這事」鄙海” “怎么了最爬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)门岔。 經(jīng)常有香客問(wèn)我爱致,道長(zhǎng),這世上最難降的妖魔是什么寒随? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任糠悯,我火速辦了婚禮,結(jié)果婚禮上妻往,老公的妹妹穿的比我還像新娘互艾。我一直安慰自己,他們只是感情好讯泣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布纫普。 她就那樣靜靜地躺著,像睡著了一般好渠。 火紅的嫁衣襯著肌膚如雪昨稼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天拳锚,我揣著相機(jī)與錄音假栓,去河邊找鬼。 笑死霍掺,一個(gè)胖子當(dāng)著我的面吹牛匾荆,可吹牛的內(nèi)容都是我干的拌蜘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棋凳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拦坠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剩岳,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贞滨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拍棕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晓铆,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年绰播,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骄噪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蠢箩,死狀恐怖链蕊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谬泌,我是刑警寧澤滔韵,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站掌实,受9級(jí)特大地震影響陪蜻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贱鼻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一宴卖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邻悬,春花似錦症昏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至础米,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間添诉,已是汗流浹背屁桑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栏赴,地道東北人蘑斧。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親竖瘾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沟突,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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