首先看看這次動(dòng)畫(huà)的效果圖

好了,現(xiàn)在開(kāi)始本次教程
分析:這個(gè)動(dòng)畫(huà)其實(shí)可以分解為3部分
1、圖片隨著手指的滑動(dòng)進(jìn)行移動(dòng)
2、隨著圖片的移動(dòng)圖片進(jìn)行以x進(jìn)行旋轉(zhuǎn)
3、隨著圖片的移動(dòng)圖片開(kāi)始進(jìn)行縮放
首先開(kāi)始第一步
static CGPoint initialPoint; //必須是靜態(tài)變量
CGPoint transition = [gesture translationInView:self.superview];
if (gesture.state == UIGestureRecognizerStateBegan) {
//將要移動(dòng)
initialPoint = self.center;
}else if (gesture.state == UIGestureRecognizerStateChanged){
//移動(dòng)
self.center = CGPointMake(initialPoint.x, initialPoint.y + transition.y);
}else if (gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerStateCancelled){
//拖動(dòng)結(jié)束或者取消
self.center = initialPoint;
}
第二步:隨著圖片的移動(dòng)圖片進(jìn)行縮放
下面涉及到了高中的數(shù)學(xué)知識(shí),鑒于本人早已畢業(yè)很多年就不自己分析了,直接貼上參考的文檔


CGFloat Y =MIN(SCROLLDISTANCE,MAX(0,ABS(transition.y)));
//一個(gè)開(kāi)口向下,頂點(diǎn)(SCROLLDISTANCE/2,1),過(guò)(0,0),(SCROLLDISTANCE,0)的二次函數(shù)
factorOfAngle = MAX(0,-4/(SCROLLDISTANCE*SCROLLDISTANCE)*Y*(Y-SCROLLDISTANCE));
//一個(gè)開(kāi)口向下,頂點(diǎn)(SCROLLDISTANCE,1),過(guò)(0,0),(2*SCROLLDISTANCE,0)的二次函數(shù)
factorOfScale = MAX(0,-1/(SCROLLDISTANCE*SCROLLDISTANCE)*Y*(Y-2*SCROLLDISTANCE));
CATransform3D t = CATransform3DIdentity;
t.m34? = 1.0/-1000;
//縮放
t = CATransform3DScale(t, 1-factorOfScale*0.2, 1-factorOfScale*0.2, 0);
第三步隨著圖片的移動(dòng)圖片以x軸進(jìn)行旋轉(zhuǎn)
原理同第二步


//旋轉(zhuǎn)
t = CATransform3DRotate(t,factorOfAngle*(M_PI/5), transition.y>0?-1:1, 0, 0);
本文為《A-GUIDE-TO-iOS-ANIMATION-master》電子書(shū)學(xué)習(xí)而進(jìn)行的個(gè)人記錄
附加demo下載地址(隨后補(bǔ)上)