IOS開發(fā)系列——UIView專題之二:動畫篇

2UIView動畫

2.1概述

UIView視圖的動畫功能,可以使在更新或切換視圖時有放緩節(jié)奏、產(chǎn)生流暢的動畫效果,進(jìn)而改善用戶體驗。UIView可以產(chǎn)生動畫效果的變化包括:

?位置變化:在屏幕上移動視圖。

?大小變化:改變視圖框架(frame)和邊界。

?拉伸變化:改變視圖內(nèi)容的延展區(qū)域。

?改變透明度:改變視圖的alpha值。

?改變狀態(tài):隱藏或顯示狀態(tài)。

?改變視圖層次順序:視圖哪個前哪個后。

?旋轉(zhuǎn):即任何應(yīng)用到視圖上的仿射變換(transform)。

UIKit直接將動畫集成到UIView類中,實現(xiàn)簡單動畫的創(chuàng)建過程。UIView類定義了幾個內(nèi)在支持動畫的屬性聲明,當(dāng)這些屬性發(fā)生改變時,視圖為其變化過程提供內(nèi)建的動畫支持。

執(zhí)行動畫所需要的工作由UIView類自動完成,但仍要在希望執(zhí)行動畫時通知視圖,為此需要將改變屬性的代碼包裝到一個代碼塊中。

2.2UIView動畫簡單創(chuàng)建方法

- (void)buttonPressed

{

//交換本視圖控制器中2個view位置

[self.viewexchangeSubviewAtIndex:0 withSubviewAtIndex:1];

//UIView開始動畫,第一個參數(shù)是動畫的標(biāo)識,第二個參數(shù)附加的應(yīng)用程序信息用來傳遞給動畫代理消息

[UIViewbeginAnimations:@"View Flip" context:nil];

//動畫持續(xù)時間

[UIViewsetAnimationDuration:1.25];

//設(shè)置動畫的回調(diào)函數(shù),設(shè)置后可以使用回調(diào)方法

[UIViewsetAnimationDelegate:self];

//設(shè)置動畫曲線,控制動畫速度

[UIView?setAnimationCurve: UIViewAnimationCurveEaseInOut];

//設(shè)置動畫方式,并指出動畫發(fā)生的位置

[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view?cache:YES];

//提交UIView動畫

[UIViewcommitAnimations];

}

- (void)viewDidLoad

{

[super viewDidLoad];

//主要功能通過UIView動畫完成2個試圖控制器的切換

self.blueController =[[BlueViewController alloc] initWithNibName:nil bundle:nil];

//設(shè)置導(dǎo)航控制器view的大小占整個屏幕

[self.blueController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

self.yellowController =[[YellowController alloc]initWithNibName:nil bundle:nil ];

[self.yellowController.view setFrame:CGRectMake(0, 0,self.view.frame.size.width , self.view.frame.size.height)];

//將2個控制器view插入到目前導(dǎo)航控制器視圖上,yellowController后插入,顯示在最前面

[self.viewinsertSubview:self.blueController.view atIndex:0];

[self.viewinsertSubview:self.yellowController.view atIndex:1];

//創(chuàng)建導(dǎo)航控制器右按鈕,按鈕名字叫next

//添加buttonPressed事件

self.rightBarItem =[[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlaintarget:self action:@selector(buttonPressed)];

//將按鈕添加到導(dǎo)航控制器默認(rèn)右按鈕上

self.navigationItem.rightBarButtonItem = self.rightBarItem;

}

有個問題:如果動畫不放在按鈕事件中,直接放到viewDidLoad里,程序首先執(zhí)行這個controller,這時動畫是不會顯示的。

原因:出現(xiàn)這個問題是因為開機時候系統(tǒng)有個動畫,系統(tǒng)動畫和這個動畫重復(fù)了。

解決方案:

1、將動畫寫在按鈕事件中

2、利用定時器。

轉(zhuǎn):UIView動畫更具體講解;http://wsqwsq000.iteye.com/blog/1189183

2.3創(chuàng)建UIView動畫(塊)——(指過渡效果的動畫)

2.3.1一.基本方式:使用UIView類的UIViewAnimation擴展

UIView動畫是成塊運行的。發(fā)出beginAnimations:context:請求標(biāo)志著動畫塊的開始;commitAnimations標(biāo)志著動畫塊的結(jié)束。把這兩個類方法發(fā)送給UIView而不是發(fā)送給單獨的視圖。在這兩個調(diào)用之間的可定義動畫的展現(xiàn)方式并更新視圖。函數(shù)說明:

//開始準(zhǔn)備動畫

+ (void)beginAnimations:(NSString *)animationID context:(void*)context;

//運行動畫

+ (void)commitAnimations;

具體二段動畫代碼:

[UIView beginAnimations:nil context:nil];

//setAnimationCurve來定義動畫加速或減速方式

[UIView?setAnimaitonCurve:UIViewAnimationCurveLinear];

[UIView setAnimationDuration:2.7];//動畫時長

[UIView setAnimationTransition:transitionforView:self.view cache:YES];

// operation>>>

[self.view exchangeSubviewAtIndex:0withSubviewAtIndex:1];

// end<<<<<

[UIView commitAnimations];

CGContextRef context = UIGraphicsGetCurrentContext();//返回當(dāng)前視圖堆棧頂部的圖形上下文

[UIView beginAnimations:nil context:context];

[UIView setAnimaitonCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationDuration:1.0];

// View changes go here

[contextView setAlpha:0.0f];

[UIView commitAnimations];

其中transition取值范圍:UIView類本身提供四種過渡效果

UIViewAnimationTransitionNone正常

UIViewAnimationTransitionFlipFromLeft從左向右翻

UIViewAnimationTransitionFlipFromRight從右向左翻

UIViewAnimationTransitionCurlUp從下向上卷

UIViewAnimationTransitionCurlDown從上向下卷

2.3.2二.block方式:使用UIView類的UIViewAnimation WithBlocks擴展

要用到的函數(shù)有:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay

options:(UIViewAnimationOptions)options animations:(void(^)(void))animations

completion:(void(^)(BOOL finished))completion

__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

//間隔,延遲,動畫參數(shù)(好像沒用?),界面更改塊,結(jié)束塊

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void(^)(void))animations

completion:(void(^)(BOOL finished))completion

__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

// delay = 0.0, options = 0

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void(^)(void))animations

__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

// delay = 0.0, options = 0, completion =

NULL

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration

options:(UIViewAnimationOptions)options animations:(void(^)(void))animations

completion:(void(^)(BOOL finished))completion

__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView

duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options

completion:(void(^)(BOOL finished))completion

__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

// toView added to fromView.superview,

fromView removed from its superview界面替換,這里的options參數(shù)有效

2.3.3三.core方式:使用CATransition類

iPhone還支持Core Animation作為其QuartzCore架構(gòu)的一部分,CA API為iPhone應(yīng)用程序提供了高度靈活的動畫解決方案。但是須知:CATransition只針對圖層,不針對視圖。圖層是Core Animation與每個UIView產(chǎn)生聯(lián)系的工作層面。使用Core Animation時,應(yīng)該將CATransition應(yīng)用到視圖的默認(rèn)圖層([myView layer])而不是視圖本身。

使用CATransition類實現(xiàn)動畫,只需要建立一個Core Animation對象,設(shè)置它的參數(shù),然后把這個帶參數(shù)的過渡添加到圖層即可。

使用要引入QuartzCore.framework代碼

#import

示例代碼:

CATransition *transition = [CATransition

animation];

transition.duration =0.7;

transition.timingFunction = [CAMediaTimingFunction

functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

transition.type = kCATransitionMoveIn;//{kCATransitionMoveIn, kCATransitionPush,kCATransitionReveal, kCATransitionFade};

//更多私有{@"cube",@"suckEffect",@"oglFlip",@"rippleEffect",@"pageCurl",@"pageUnCurl",@"cameraIrisHollowOpen",@"cameraIrisHollowClose"};

transition.subtype =

kCATransitionFromLeft;//{kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop,kCATransitionFromBottom};

transition.delegate= self;

[self.view.layer addAnimation:transition forKey:nil];

//要做的

[self.view exchangeSubviewAtIndex:1withSubviewAtIndex:0];

CATransition動畫使用了類型type和子類型subtype兩個概念。type屬性指定了過渡的種類(淡化、推擠、揭開、覆蓋)。subtype設(shè)置了過渡的方向(從上、下、左、右)。另外,CATransition私有的動畫類型有(立方體、吸收、翻轉(zhuǎn)、波紋、翻頁、反翻頁、鏡頭開、鏡頭關(guān))。

2.4API簡介

areAnimationsEnabled

返回一個布爾值表示動畫是否結(jié)束。

+ (BOOL)areAnimationsEnabled

返回值

如果動畫結(jié)束返回YES,否則NO。

beginAnimations:context:

開始一個動畫塊

+ (void)beginAnimations:(NSString*)animationID context:(void *)context

參數(shù)

animationID

動畫塊內(nèi)部應(yīng)用程序標(biāo)識用來傳遞給動畫代理消息-這個選擇器運用setAnimationWillStartSelector:和setAnimationDidStopSelector:方法來設(shè)置。

context

附加的應(yīng)用程序信息用來傳遞給動畫代理消息-這個選擇器使用setAnimationWillStartSelector:和setAnimationDidStopSelector:方法。

討論

這個值改變是因為設(shè)置了一些需要在動畫塊中產(chǎn)生動畫的屬性。動畫塊可以被嵌套。如果在沒有在動畫塊中調(diào)用那么setAnimation類方法將什么都不做。使用beginAnimations:context:來開始一個動畫塊并用commitAnimations類方法來結(jié)束一個動畫塊。

commitAnimations

結(jié)束一個動畫塊并開始當(dāng)他在動畫塊外時。

+ (void)commitAnimations

討論

如果當(dāng)前的動畫塊是最外層的動畫塊,當(dāng)應(yīng)用程序返回到循環(huán)運行時開始動畫塊。動畫在一個獨立的線程中所有應(yīng)用程序不會中斷。使用這個方法,多個動畫可以被實現(xiàn)。查看setAnimationBeginsFromCurrentState:來了解如果開始一個動畫當(dāng)另外一個動畫在播放的時候。

layerClass

返回類用來創(chuàng)建這一個本類的layer實例對象。

+ (Class)layerClass

返回值

一個用來創(chuàng)建視圖layer的類

討論

重寫子類來指定一個自定義類用來顯示。當(dāng)在創(chuàng)建視圖layer時候調(diào)用。默認(rèn)的值是CALayer類對象。

setAnimationBeginsFromCurrentState:

設(shè)置動畫從當(dāng)前狀態(tài)開始播放。

+(void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState

參數(shù)

fromCurrentState

YES如果動畫需要從他們當(dāng)前狀態(tài)開始播放。否則為NO。

討論

如果設(shè)置為YES那么當(dāng)動畫在運行過程中,當(dāng)前視圖的位置將會作為新的動畫的開始狀態(tài)。如果設(shè)置為NO,當(dāng)前動畫結(jié)束前新動畫將使用視圖最後狀態(tài)的位置作為開始狀態(tài)。這個方法將不會做任何事情如果動畫沒有運行或者沒有在動畫塊外調(diào)用。使用beginAnimations:context:類方法來開始并用commitAnimations類方法來結(jié)束動畫塊。默認(rèn)值是NO。

setAnimationCurve:

設(shè)置動畫塊中的動畫屬性變化的曲線。

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve

討論

動畫曲線是動畫運行過程中相對的速度。如果在動畫塊外調(diào)用這個方法將會無效。使用beginAnimations:context:類方法來開始動畫塊并用commitAnimations來結(jié)束動畫塊。默認(rèn)動畫曲線的值是UIViewAnimationCurveEaseInOut。

setAnimationDelay:

在動畫塊中設(shè)置動畫的延遲屬性(以秒為單位)

+(void)setAnimationDelay:(NSTimeInterval)delay

討論

這個方法在動畫塊外調(diào)用無效。使用beginAnimations:context:類方法開始一個動畫塊并用commitAnimations類方法結(jié)束動畫塊。默認(rèn)的動畫延遲是0.0秒。

setAnimationDelegate:

設(shè)置動畫消息的代理。

+ (void)setAnimationDelegate:(id)delegate

參數(shù)

delegate

你可以用setAnimationWillStartSelector:和setAnimationDidStopSelector:方法來設(shè)置接收代理消息的對象。

討論

這個方法在動畫塊外沒有任何效果。使用beginAnimations:context:類方法開始一個動畫塊并用commitAnimations類方法結(jié)束一個動畫塊。默認(rèn)值是nil

setAnimationDidStopSelector:

設(shè)置消息給動畫代理當(dāng)動畫停止的時候。

+(void)setAnimationDidStopSelector:(SEL)selector

參數(shù)

selector

當(dāng)動畫結(jié)束的時候發(fā)送給動畫代理。默認(rèn)值是NULL。這個選擇者須有下面方法的簽名:animationFinished:(NSString *)animationID

finished:(BOOL)finished context:(void *)context。

animationID

一個應(yīng)用程序提供的標(biāo)識符。和傳給beginAnimations:context:相同的參數(shù)。這個參數(shù)可以為空。

finished

如果動畫在停止前完成那返回YES;否則就是NO。

context

一個可選的應(yīng)用程序內(nèi)容提供者。和beginAnimations:context:方法相同的參數(shù)。可以為空。

討論

這個方法在動畫塊外沒有任何效果。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法結(jié)束。默認(rèn)值是NULL。

setAnimationDuration:

設(shè)置動畫塊中的動畫持續(xù)時間(用秒)

+(void)setAnimationDuration:(NSTimeInterval)duration

參數(shù)

duration

一段動畫持續(xù)的時間。

討論

這個方法在動畫塊外沒有效果。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結(jié)束一個動畫塊。默認(rèn)值是0.2。

setAnimationRepeatAutoreverses:設(shè)置動畫塊中的動畫效果是否自動重復(fù)播放。

+(void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses

參數(shù)

repeatAutoreverses

如果動畫自動重復(fù)就是YES否則就是NO。

討論

自動重復(fù)是當(dāng)動畫向前播放結(jié)束後再重頭開始播放。使用setAnimationRepeatCount:類方法來指定動畫自動重播的時間。如果重復(fù)數(shù)為0或者在動畫塊外那將沒有任何效果。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations方法來結(jié)束一個動畫塊。默認(rèn)值是NO。

setAnimationRepeatCount:

設(shè)置動畫在動畫模塊中的重復(fù)次數(shù)

+(void)setAnimationRepeatCount:(float)repeatCount

參數(shù)

repeatCount

動畫重復(fù)的次數(shù),這個值可以是分?jǐn)?shù)。

討論

這個屬性在動畫塊外沒有任何作用。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結(jié)束。默認(rèn)動畫不循環(huán)。

setAnimationsEnabled:

設(shè)置是否激活動畫

+ (void)setAnimationsEnabled:(BOOL)enabled

參數(shù)

enabled

如果是YES那就激活動畫;否則就是NO

討論

當(dāng)動畫參數(shù)沒有被激活那么動畫屬性的改變將被忽略。默認(rèn)動畫是被激活的。

setAnimationStartDate:

設(shè)置在動畫塊內(nèi)部動畫屬性改變的開始時間

+ (void)setAnimationStartDate:(NSDate*)startTime

參數(shù)

startTime

一個開始動畫的時間

討論

使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結(jié)束動畫塊。默認(rèn)的開始時間值由CFAbsoluteTimeGetCurrent方法來返回。

setAnimationTransition:forView:cache:在動畫塊中為視圖設(shè)置過渡

+ (void)setAnimationTransition:(UIViewAnimationTransition)transitionforView:(UIView *)view cache:(BOOL)cache

參數(shù)

transition

把一個過渡效果應(yīng)用到視圖中。可能的值定義在UIViewAnimationTransition中。

view

需要過渡的視圖對象。

cache

如果是YES,那么在開始和結(jié)束圖片視圖渲染一次并在動畫中創(chuàng)建幀;否則,視圖將會在每一幀都渲染。例如緩存,你不需要在視圖轉(zhuǎn)變中不停的更新,你只需要等到轉(zhuǎn)換完成再去更新視圖。

討論

如果你想要在轉(zhuǎn)變過程中改變視圖的外貌。舉個例子,文件從一個視圖到另一個視圖,然後使用一個UIView子類的容器視圖,如下:

1.Begin an animation block.

2.Set the transition on the container view.

3.Remove the subview from the containerview.

4.Add the new subview to the containerview.

5.Commit the animation block.

1.開始一個動畫塊。2.在容器視圖中設(shè)置轉(zhuǎn)換。3.在容器視圖中移除子視圖。4.在容器視圖中添加子視圖。5.結(jié)束動畫塊。

setAnimationWillStartSelector:

當(dāng)動畫開始時發(fā)送一條消息到動畫代理

+(void)setAnimationWillStartSelector:(SEL)selector

參數(shù)

selector

在動畫開始前向動畫代理發(fā)送消息。默認(rèn)值是NULL。這個selector必須由和beginAnimations:context:方法相同的參數(shù),一個任選的程序標(biāo)識和內(nèi)容。這些參數(shù)都可以是nil。

討論

這個方法在動畫塊外沒有任何作用。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結(jié)束。

2.5簡單動畫效果示例

2.5.1簡單移動

imageView.transform =CGAffineTransformIdentity;

imageView.frame=CGRectMake(0, 100, 320,320);

[UIView beginAnimations:@"clearmemory"context:imageView];

[UIView setAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton)];

imageView.frame=CGRectMake(34, 0, 320,320);

[UIView commitAnimations];

2.5.2動畫曲線

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:1];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseIn];

//UIViewAnimationCurveEaseInOut, ? ? ? ? // slow at beginningand end

//UIViewAnimationCurveEaseIn,? ? ? ? ? ? // slowat beginning

//UIViewAnimationCurveEaseOut, ? ? ? ? ? // slow atend

//UIViewAnimationCurveLinear

//恒定速度

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

imageView.frame=CGRectMake(22, 0, 320, 320);

[UIView commitAnimations];

2.5.3反向重復(fù)

[UIViewbeginAnimations:@"animation3" context:imageView1];

[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];

[UIViewsetAnimationDuration:1.0];

[UIViewsetAnimationRepeatAutoreverses:YES];

[UIViewsetAnimationRepeatCount:10];

[UIViewsetAnimationDelegate:self];

[UIView setAnimationDidStopSelector:@selector(enablebutton:)];

imageView1.alpha=0;

[UIViewcommitAnimations];

2.5.4延時,緩入,緩出

[UIView beginAnimations:nilcontext:nil];

[UIViewsetAnimationDelay:0.5];

[UIViewsetAnimationDuration:1.5];

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseIn];

[UIViewsetAnimationRepeatAutoreverses:YES];

[UIView setAnimationRepeatCount:2];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

imageView.frame=CGRectMake(120, 0, 200, 200);

[UIView commitAnimations];

//緩出

[UIView beginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:1];

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseOut];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

imageView.frame=CGRectMake(235, 144, 200 , 200);

[UIView commitAnimations];

2.5.5放大

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:1];

[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

imageView.transform=CGAffineTransformMakeScale(2,2);

[UIView commitAnimations];

//旋轉(zhuǎn)放大這里用到179.9是因為你不管前面加-+都是逆時針

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:1];

[UIViewsetAnimationCurve:UIViewAnimationCurveLinear];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

CGAffineTransformtranform1=CGAffineTransformMakeScale(1, 1);

CGAffineTransformtranform3=CGAffineTransformMakeTranslation(200, 200);

CGAffineTransformtranform2=CGAffineTransformMakeRotation(179.9*M_PI/180.0);

imageView.transform=CGAffineTransformConcat(tranform1, tranform3);

[UIView commitAnimations];

2.5.6平移旋轉(zhuǎn)

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:1];

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

CGAffineTransformtranform1=CGAffineTransformMakeTranslation(-200, 0);

// CGAffineTransformtranform2= CGAffineTransformMakeRotation(179.9*M_PI/180.0);

imageView.transform=CGAffineTransformRotate(tranform1, 359.9*M_PI/180.0);

[UIView commitAnimations];

2.5.7翻轉(zhuǎn)

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:1];

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseIn];

[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRightforView:self.viewcache:YES];

//UIViewAnimationTransitionFlipFromLeft從左往右翻

//UIViewAnimationTransitionFlipFromRight從右往左翻

//UIViewAnimationTransitionCurlUp從上往下翻

//UIViewAnimationTransitionCurlDown從下往上翻

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(enablebutton:)];

imageView.hidden=YES;

imageView1.hidden=NO;

[UIView commitAnimations];

2.5.8淡入淡出

CATransition *animation = [CATransitionanimation];

animation.duration = 0.75f; //動畫時長

animation.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

animation.delegate = self;

animation.type = kCATransitionFade; //過度效果

//kCATransitionFade淡入淡出

//kCATransitionMoveIn移入移出

//kCATransitionPush壓入推出

//kCATransitionReveal覆蓋移除

animation.subtype=kCATransitionFromLeft;

//kCATransitionFromRight從左

//kCATransitionFromLeft從右

//kCATransitionFromTop從上

//kCATransitionFromBottom從下

[self.view.layer addAnimation:animationforKey:@"animation"];

imageView.hidden=YES;

imageView1.hidden=NO;

-(void)enablebutton:(id)sender

{

imageView.transform=CGAffineTransformIdentity;

imageView.frame=CGRectMake(0,0, 200, 200);

//btn.enabled=NO;

}

2.5.9點擊縮略圖到大圖的過場動畫

CGRectframe = [smallImgView.superviewconvertRect: smallImgView.frametoView:self.window];

//后續(xù)有入場動畫

_coverView=

[[UIScrollViewalloc]initWithFrame:frame];

//增加入場動畫

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:0.25];

_coverView.frame=CGRectMake(0,0,ESScrnW,ESScrnH);

[UIViewcommitAnimations];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,169評論 1 23
  • 源博客:(http://www.cnblogs.com/pengyingh/articles/2378777.ht...
    seonhiu閱讀 2,725評論 0 3
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,572評論 6 30
  • UIKit直接將動畫集成到UIView類中,當(dāng)內(nèi)部的一些屬性發(fā)生改變時,UIView將為這些改變提供動畫支持。 U...
    白水灬煮一切閱讀 1,471評論 0 0
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,143評論 5 13