深度解析iPhone開(kāi)發(fā)動(dòng)畫(huà)過(guò)渡過(guò)程
深度解析iPhone開(kāi)發(fā)動(dòng)畫(huà)過(guò)渡過(guò)程,主要講解了iphone開(kāi)發(fā)中動(dòng)畫(huà)過(guò)度的相關(guān)內(nèi)容,不多說(shuō),先來(lái)看詳細(xì)內(nèi)容。
1:首先獲取當(dāng)前的圖形上下文:
- CGContextRef context = UIGraphicsGetCurrentContext();
2:接著設(shè)置一些動(dòng)畫(huà)屬性用于開(kāi)始動(dòng)畫(huà):
- [UIView beginAnimations:nil context:context];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:1.0];
3:然后設(shè)置想要過(guò)度的對(duì)象的最終狀態(tài).
- [big setFrame:SMALLRECT];
- [big setAlpha:0.5];
- [little setFrame:BIGRECT];
- [little setAlpha:1.0];
4:最后提交動(dòng)畫(huà),這樣一個(gè)動(dòng)畫(huà)就會(huì)自動(dòng)生成了
- [UIView commitAnimations];
其中,setAnimationCurve是設(shè)置動(dòng)畫(huà)的方式,他有下面集中方式:
- UIViewAnimationCurveEaseInOut //開(kāi)始和結(jié)束時(shí)動(dòng)畫(huà)效果比較慢
- UIViewAnimationCurveEaseIn //開(kāi)始動(dòng)畫(huà)效果比較慢
- UIViewAnimationCurveEaseOut //結(jié)束動(dòng)畫(huà)效果比較慢
- UIViewAnimationCurveLinear //平滑的動(dòng)畫(huà)效果
而setAnimationDuration則是設(shè)置動(dòng)畫(huà)的持續(xù)時(shí)間.
下面是兩個(gè)UIView之間的動(dòng)畫(huà)過(guò)度
- // Start Animation Block
- //CGContextRef context = UIGraphicsGetCurrentContext();
- CGContextRef context = nil;
- [UIView beginAnimations:nil context:context];
- [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:[self superview] cache:YES];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:1.0];
- // Animations
- [[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
- // Commit Animation Block
- [UIView commitAnimations];
頁(yè)面之間的過(guò)度主要依靠UIView setAnimationTransition: forView: cache: 這個(gè)方法以及 exchangeSubviewAtIndex:withSubviewAtIndex:
前者通過(guò)UIView靜態(tài)方法設(shè)置過(guò)度的動(dòng)畫(huà)種類,后者實(shí)現(xiàn)真正的過(guò)度函數(shù)掉用.種類有如下五種:
- typedef enum {
- UIViewAnimationTransitionNone,
- UIViewAnimationTransitionFlipFromLeft,
- UIViewAnimationTransitionFlipFromRight,
- UIViewAnimationTransitionCurlUp,
- UIViewAnimationTransitionCurlDown,
- } UIViewAnimationTransition;
除了這種簡(jiǎn)單的動(dòng)畫(huà)方式外,其實(shí)還有一種利用QuartzCore來(lái)做過(guò)度動(dòng)畫(huà).不同的地方在于,這個(gè)過(guò)度動(dòng)畫(huà)作用于層,換句話說(shuō),他動(dòng)畫(huà)直接做用于整個(gè)UIView,而不像UIView的動(dòng)畫(huà),可以作用于UIView局部或本身.當(dāng)UIView作用與本身時(shí),實(shí)際上也就相當(dāng)于是對(duì)層的動(dòng)畫(huà)了.
- CATransition *animation = [CATransition animation];
- [animation setDelegate:self];
- [animation setDuration:1.0f];
- [animation setTimingFunction:UIViewAnimationCurveEaseInOut];
- [animation setType: kCATransitionMoveIn];
- [animation setSubtype: kCATransitionFromBottom];
- [[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
- [[[self superview] layer] addAnimation:animation forKey:@"transitionViewAnimation"];
setDuration:和UIView中的動(dòng)畫(huà)效果一樣,持續(xù)時(shí)間.setTimingFunction:是動(dòng)畫(huà)的種類,和UIView一樣,比如勻速動(dòng)畫(huà),快速開(kāi)始結(jié)束等.setType:是指定動(dòng)畫(huà)的類型,他有: kCATransitionFade (淡入淡出來(lái)補(bǔ)給動(dòng)畫(huà))kCATransitionMoveIn(從一個(gè)方向覆蓋的方式來(lái)補(bǔ)給動(dòng)畫(huà))kCATransitionPush(推送的方式來(lái)補(bǔ)給動(dòng)畫(huà))kCATransitionReveal(一個(gè)試圖展現(xiàn)出另外另外一個(gè)試圖的方式)當(dāng)除了第一種方式外(淡入淡出),可以通過(guò)setSubType:來(lái)制定動(dòng)畫(huà)的方向(因?yàn)檫@些動(dòng)畫(huà)都是直接著用于層的,所以相當(dāng)于只有試圖間的切換過(guò)渡).動(dòng)畫(huà)方向有4個(gè):kCATransitionFromRightkCATransitionFromLeftkCATransitionFromTopkCATransitionFromBotto
小結(jié):深度解析iPhone開(kāi)發(fā)動(dòng)畫(huà)過(guò)渡過(guò)程的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!