1.UIViewAnimation簡(jiǎn)單易用愧哟,但可定制性太低靴庆,他的特點(diǎn)便是開弓沒有回頭箭讲逛,我們停不下來匣摘。當(dāng)我們想暫停一個(gè)動(dòng)畫時(shí)店诗,可以這樣做:
speed
一個(gè)layer執(zhí)行動(dòng)畫的速度,那么我們把layer的speed設(shè)置為0音榜,動(dòng)畫自然就停止了庞瘸。所以,speed這個(gè)參數(shù)是我們暫停動(dòng)畫的關(guān)鍵赠叼。
beginTime
動(dòng)畫開始的時(shí)間擦囊。
timeOffset
動(dòng)畫的偏移時(shí)間,有點(diǎn)類似scrollerView的contentOffset嘴办。
代碼如下:
-(void)pauseLayer:(CALayer*)layer {
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
摘錄來自: zangqilong. “iOS進(jìn)階指南”瞬场。 iBooks.
當(dāng)暫停之后我們需要從暫停處重新啟動(dòng):則需要拿到暫停時(shí)的時(shí)間偏移,然后賦值給動(dòng)畫的beginTime涧郊。
-(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;
}
摘錄來自: zangqilong. “iOS進(jìn)階指南”泌类。 iBooks.
2.根據(jù)手勢(shì)或者其他變量來控制動(dòng)畫:
添加動(dòng)畫時(shí),如果我們想手動(dòng)控制動(dòng)畫的執(zhí)行底燎,可以在動(dòng)畫添加之前將layer的speed設(shè)為0.
3.M34
這里有一個(gè)透視投影的概念:
在現(xiàn)實(shí)3D生活中刃榨,我們之所以能有強(qiáng)烈的立體感,是因?yàn)槲矬w離我們的遠(yuǎn)近會(huì)影響他在我們眼中的視圖大小双仍,同樣的東西在近處看絕對(duì)比遠(yuǎn)處看大枢希,然而在屏幕上各個(gè)視圖都是等距離的。
在等距投影中朱沃,遠(yuǎn)處的物體和近處的物體保持同樣的縮放比例苞轿,這種投影也有它自己的用處(例如建筑繪圖,顛倒逗物,和偽3D視頻)搬卒,但當(dāng)前我們并不需要。
為了做一些修正翎卓,我們需要引入投影變換(又稱作z變換)來對(duì)除了旋轉(zhuǎn)之外的變換矩陣做一些修改契邀,Core Animation并沒有給我們提供設(shè)置透視變換的函數(shù),因此我們需要手動(dòng)修改矩陣值失暴,幸運(yùn)的是坯门,很簡(jiǎn)單:
CATransform3D
的透視效果通過一個(gè)矩陣中一個(gè)很簡(jiǎn)單的元素來控制:m34
微饥。
“struct CATransform3D
{
CGFloat m11(x縮放), m12(y切變), m13(旋轉(zhuǎn)), m14();
CGFloat m21(x切變), m22(y縮放), m23(), m24();
CGFloat m31(旋轉(zhuǎn)), m32( ), m33(), m34(透視效果,要操作的這個(gè)對(duì)象要有旋轉(zhuǎn)的角度古戴,否則沒有效果欠橘。正直/負(fù)值都有意義);
CGFloat m41(x平移), m42(y平移), m43(z平移), m44();
};”
摘錄來自: zangqilong. “iOS進(jìn)階指南”。 iBooks.