IOS学习动画二之 Core Animation (3)
三、關(guān)鍵幀動(dòng)畫:CAKeyframeAnimation
(1)values屬性
values屬性指明整個(gè)動(dòng)畫過(guò)程中的關(guān)鍵幀點(diǎn)。
(2)path屬性
這是一個(gè) CGPathRef ?對(duì)象,默認(rèn)是空的,當(dāng)我們創(chuàng)建好CAKeyframeAnimation的實(shí)例的時(shí)候,可以通過(guò)制定一個(gè)自己定義的path來(lái)讓某一個(gè)物體按照這個(gè)路徑進(jìn)行動(dòng)畫。這個(gè)值默認(rèn)是nil,當(dāng)其被設(shè)定的時(shí)候,values這個(gè)屬性就被覆蓋 。
CGMutablePathRef?path?=?CGPathCreateMutable(); CGPathMoveToPoint(path,?NULL,?rectLayer.position.x?-?15,?rectLayer.position.y?-?15); CGPathAddLineToPoint(path,?NULL,?320?-?15,?rectLayer.frame.origin.y); CGPathAddLineToPoint(path,?NULL,?320?-?15,?rectLayer.frame.origin.y?+?100); CGPathAddLineToPoint(path,?NULL,?15,?rectLayer.frame.origin.y?+?100); CGPathAddLineToPoint(path,?NULL,?15,?rectLayer.frame.origin.y); rectRunAnimation.path?=?path; CGPathRelease(path);(3)keyTimes屬性
該屬性是一個(gè)數(shù)組,用以指定每個(gè)子路徑(AB,BC,CD)的時(shí)間。如果你沒(méi)有顯式地對(duì)keyTimes進(jìn)行設(shè)置,則系統(tǒng)會(huì)默認(rèn)每條子路徑的時(shí)間為:ti=duration/(5-1),即每條子路徑的duration相等,都為duration的1\4。當(dāng)然,我們也可以傳個(gè)數(shù)組讓物體快慢結(jié)合。例如,你可以傳入{0.0, 0.1,0.6,0.7,1.0},其中首尾必須分別是0和1,因此tAB=0.1-0, tCB=0.6-0.1, tDC=0.7-0.6, tED=1-0.7.....
(4)timeFunctions屬性
用過(guò)UIKit層動(dòng)畫的同學(xué)應(yīng)該對(duì)這個(gè)屬性不陌生,這個(gè)屬性用以指定時(shí)間函數(shù),類似于運(yùn)動(dòng)的加速度,有以下幾種類型。上例子的AB段就是用了淡入淡出效果。記住,這是一個(gè)數(shù)組,你有幾個(gè)子路徑就應(yīng)該傳入幾個(gè)元素
?kCAMediaTimingFunctionLinear//線性kCAMediaTimingFunctionEaseIn//淡入kCAMediaTimingFunctionEaseOut//淡出kCAMediaTimingFunctionEaseInEaseOut//淡入淡出kCAMediaTimingFunctionDefault//默認(rèn)(5)calculationMode屬性
該屬性決定了物體在每個(gè)子路徑下是跳著走還是勻速走,跟timeFunctions屬性有點(diǎn)類似
const kCAAnimationLinear//線性,默認(rèn)
const kCAAnimationDiscrete//離散無(wú)中間過(guò)程 keyTimes設(shè)置的時(shí)間仍生效 跳躍地出現(xiàn)在各個(gè)關(guān)鍵幀上
const kCAAnimationPaced//平均,keyTimes跟timeFunctions失效
const kCAAnimationCubic//平均,同上
const kCAAnimationCubicPaced//平均,同上
此外,動(dòng)畫的暫停與開始可以通過(guò)下面的方式做到:
-(void)pauseLayer:(CALayer*)layer?{CFTimeInterval?pausedTime?=?[layer?convertTime:CACurrentMediaTime()?fromLayer:nil];layer.speed?=?0.0;layer.timeOffset?=?pausedTime; }? -(void)resumeLayer:(CALayer*)layer?{CFTimeInterval?pausedTime?=?[layer?timeOffset];layer.speed?=?1.0;layer.timeOffset?=?0.0;layer.beginTime?=?0.0;CFTimeInterval?timeSincePause?=?[layer?convertTime:CACurrentMediaTime()?fromLayer:nil]?-?pausedTime;layer.beginTime?=?timeSincePause; }轉(zhuǎn)載于:https://blog.51cto.com/5934497/1703455
總結(jié)
以上是生活随笔為你收集整理的IOS学习动画二之 Core Animation (3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java6.0中Comparable接口
- 下一篇: Calendar的获取变化日期