在iOS開(kāi)發(fā)中,動(dòng)畫(huà)主要有2種:
1. UIView的動(dòng)畫(huà):
? ? ?在IOS4.0以前饵沧,用begin和commit模式谒出,代碼如下:
可選的動(dòng)畫(huà)代理:
-(void)animationDidStart:(CAAnimation *)anim
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
? 在iOS4.0及以后支持block模式娩鹉,代碼如下:
在動(dòng)畫(huà)視圖(UIView)上添加點(diǎn)擊手勢(shì)建炫,在手勢(shì)中添加動(dòng)畫(huà)代碼如下:
2. Core Animation 動(dòng)畫(huà)
有隱式動(dòng)畫(huà)和顯示動(dòng)畫(huà)兩種,本文主要介紹顯示動(dòng)畫(huà):
主要是在CALayer圖層上的動(dòng)畫(huà)断盛,圖層包括:模型層罗洗,表示層;
顯示動(dòng)畫(huà)主要有以下幾種:
1. CABasicAnimation 基本單一類(lèi)型的動(dòng)畫(huà):
重點(diǎn)給出位置動(dòng)畫(huà)的代碼钢猛,常見(jiàn)的keypath如下表:
當(dāng)UIView移動(dòng)到指定位置后伙菜,會(huì)返回到初始位置,那是因?yàn)閯?dòng)畫(huà)作用在表示層厢洞,當(dāng)動(dòng)畫(huà)結(jié)束時(shí)仇让,動(dòng)畫(huà)會(huì)被移除掉,此刻模型層還沒(méi)有變化躺翻,所以最終會(huì)回到初始位置丧叽。有兩種方式來(lái)處理這種問(wèn)題。
1. 直接作用到模型層公你,改變模型層的屬性值
2. 設(shè)置動(dòng)畫(huà)的屬性removedOnCompletion = NO (動(dòng)畫(huà)不刪除) 和 fillMode = kCAFillModeForwards (動(dòng)畫(huà)保持在結(jié)束位置)
建議使用第一種踊淳,第二種方式動(dòng)畫(huà)一直存在,會(huì)影響系統(tǒng)的性能陕靠。
2. CAKeyframeAnimation 幀動(dòng)畫(huà)
? ? ? 主要操作屬性有 keyPath 和 values 值組合迂尝。
3. CAAnimationGroup 組合動(dòng)畫(huà)
? ? ? 操作屬性:animations 將CAAnimation類(lèi)型的動(dòng)畫(huà)加入數(shù)組,F(xiàn)IFO的方式執(zhí)行剪芥。
另外感覺(jué)CAShapeLayer很牛叉垄开,根據(jù)其中的strokeStart和strokeEnd做一些動(dòng)畫(huà):
例如可以做下載用的進(jìn)度條,取代系統(tǒng)自帶的税肪;
初始化方法:
通過(guò)readwrite屬性 progress來(lái)改變strokeEnd來(lái)進(jìn)行動(dòng)畫(huà)操作
就寫(xiě)到這里了溉躲,歡迎大家來(lái)吐槽,后期會(huì)不斷優(yōu)化益兄,謝謝锻梳。