動(dòng)畫(huà)學(xué)習(xí)1

首先看看這次動(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ǔ)上)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容