成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS開發UIView的Animation效果

移動開發 iOS
現實比想象的美好, 蘋果公司為開發者思考了一些問題,通過使用UIKit提供的動畫支持,開發者只需要簡單的幾行代碼就能實現各種各樣的動畫效果。在UIKit中,所有的動畫效果支持的方法都在UIView類中。

所謂動畫效果,就是會動的畫,到iOS App中來說的話,就是各種UIView的移動。 想想看,如果我們自己來實現所有UIView的動畫效果,需要考慮些什么東西呢?

* 該UIView現在在哪兒?

* 該UIView最后會動到哪兒?

* 該UIView以什么樣的方式移動到那兒?

* 該動畫持續多長時間?

* 每次移動的最小時間間隔?

* 每次最小時間間隔的移動的應該移動到哪兒?

* ….

想想這是一個多么殺腦細胞的過程,尤其是每一次的動畫過程都要重復這一折磨的過程。

還好,現實比想象的美好, 蘋果公司為開發者思考了上面的問題,通過使用UIKit提供的動畫支持,開發者只需要簡單的幾行代碼就能實現各種各樣的動畫效果。在UIKit中,所有的動畫效果支持的方法都在UIView類中。

首先,在UIView中有很多屬性用以描述一個UIView的狀態,而動畫就是讓UIView從一個狀態平滑的過渡到另外一個狀態的過程。這些屬性有:

屬性名

作用

frame

控制UIView的大小和該UIView在superview中的相對位置。

bounds

控制UIView的大小

center

控制UIView的位置

transform

控制UIView的縮放,旋轉角度等固定好中心位置之后的變化

alpha

控制UIView的透明度

backgroundColor

控制UIView的背景色

contentStretch

控制UIView的拉伸方式

通過設置這些屬性,基本上就解決了動畫中的移動到哪兒的問題。

接著,蘋果公司在UIView中加入很多方法來方便家控制動畫的移動時間,以及移動的方式。iOS3.0及之前,UIView支持的Animation方法有如下這么多:

Object-c代碼

  1. @interface UIView(UIViewAnimation) 
  2.  
  3. + (void)beginAnimations:(NSString *)animationID context:(void *)context; // additional context info passed to will start/did stop selectors. begin/commit can be nested 
  4. + (void)commitAnimations; // starts up any animations when the top level animation is commited 
  5.  
  6. // no getters. if called outside animation block, these setters have no effect. 
  7. + (void)setAnimationDelegate:(id)delegate; // default = nil 
  8. + (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context 
  9. + (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
  10. + (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2 
  11. + (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0 
  12. + (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date]) 
  13. + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut 
  14. + (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional 
  15. + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. used if repeat count is non-zero 
  16. + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default). 
  17.  
  18. + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; // current limitation - only one per begin/commit block 
  19.  
  20. + (void)setAnimationsEnabled:(BOOL)enabled; // ignore any attribute changes while set. 
  21. + (BOOL)areAnimationsEnabled; 
  22.  
  23. @end 

這些方法非常的不直觀,開發者還是需要花很多時間去思考怎么組合這些方法。但是自從iOS4.0提供塊語法支持之后,蘋果公司把動畫效果的實現封裝了一下,效果立桿見影,直觀了許多,因此大家完全可以不用去看上面的那些方法,重點關注如下的方法:

Object-c代碼

  1. @interface UIView(UIViewAnimationWithBlocks) 
  2.  
  3. + (void)animateWithDuration:(NSTimeInterval)duration  
  4. delay:(NSTimeInterval)delay  
  5. options:(UIViewAnimationOptions)options  
  6. animations:(void (^)(void))animations  
  7. completion:(void (^)(BOOL finished))completion; 
  8.  
  9. + (void)animateWithDuration:(NSTimeInterval)duration  
  10. animations:(void (^)(void))animations  
  11. completion:(void (^)(BOOL finished))completion  
  12. NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0 
  13.  
  14. + (void)animateWithDuration:(NSTimeInterval)duration  
  15. animations:(void (^)(void))animations 
  16. NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL 
  17.  
  18. + (void)transitionWithView:(UIView *)view  
  19. duration:(NSTimeIntervl)duration  
  20. options:(UIViewAnimationOptins)options  
  21. animations:(void (^)(void)animations  
  22. completion:(void (^)(BOOL finished) completion  
  23. NS_AVAILABLE_IOS(4_0); 
  24.  
  25. + (void)transitionFromView:(UIView *)fromView  
  26. toView:(UIView *)toView  
  27. duration:(NSTimeInterval)duration  
  28. options:(UIViewAnimationOptions)options  
  29. completion:(void (^)(BOOL finished))completion 
  30. NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview 
  31.  
  32. @end 

上面的幾個方法從名字上看就非常直觀。前三個方法都可以按如下的方式直譯,只是后兩個使用了一些默認參數而已:

Java代碼

  1. 做一個動畫效果,持續時間為duration,  
  2. 延遲delay秒開始執行 , 
  3. 以options指定的方式運行這個動畫, 
  4. animations塊中指定哪些UIView會參加本次動畫效果,以及動畫效果完成時這些UIView會是一個什么狀態,  
  5. 動畫完成之后,執行completion塊進行收尾。 

有了這3個方法,開發者只需要思考,初始值,結果值,持續時間,運行方式就行了,具體的細節移動都交給類庫。

后2個方法是用于UIView相互之間轉換的,個人覺得用處不大,因為用上面的三個方法同樣可以做到這些效果,因此略過。

關于UIView的動畫效果支持,有2點值得一提

* 上面所有的方法都是類方法,當調用這些方法之后,系統會新起線程執行動畫效果,不會阻塞主線程的執行。

* UIView的Animation效果只支持一些簡單的2D動畫效果,復雜的大家還得研究Core Animation。

一個實戰例子

在我寫的一個小游戲的主機界面中,我使用了一點動畫的效果,主界面的設計圖如下:

[[81423]]

動畫后的效果圖如下:

[[81424]]

我想要的效果就是,加載主界面后,圖片緩緩的展開成扇形,然后游戲的菜單顯示供玩家點擊。

代碼如下:

首先,準備動畫前狀態,讓想展示的UIView不可見:

Object-c代碼

  1. -(void) prepareForIntroAnimation 
  2. self.sImageView.hidden=YES; 
  3. self.nImageView.hidden=YES; 
  4. self.aImageView.hidden=YES; 
  5. self.pImageView.hidden=YES; 
  6. self.jokerImageView.hidden=YES; 
  7.  
  8. self.hostGameButton.alpha=0.0f; 
  9. self.joinGameButton.alpha=0.0f; 
  10. self.singlePlayerGameButton.alpha=0.0f; 
  11. self.helpButton.alpha=0.0f; 
  12. _buttonsEnabled = NO; 

然后,展示動畫效果:

Object-c代碼

  1. -(void) performAnimation 
  2. //顯示UIView 
  3. self.sImageView.hidden=NO; 
  4. self.nImageView.hidden=NO; 
  5. self.aImageView.hidden=NO; 
  6. self.pImageView.hidden=NO; 
  7. self.jokerImageView.hidden=NO; 
  8.  
  9. [UIView animateWithDuration:0.65f 
  10. delay:0.5f 
  11. options:UIViewAnimationOptionCurveEaseIn 
  12. animations:^ 
  13. //確定UIView的的中心位置和偏轉角度 
  14. self.sImageView.center = CGPointMake(80.0f, 108.0f); 
  15. self.sImageView.transform = CGAffineTransformMakeRotation(-0.22f); 
  16.  
  17. self.nImageView.center = CGPointMake(160.0f, 93.0f); 
  18. self.nImageView.transform = CGAffineTransformMakeRotation(-0.1f); 
  19.  
  20. self.aImageView.center = CGPointMake(240.0f, 88.0f); 
  21.  
  22. self.pImageView.center = CGPointMake(320.0f, 93.0f); 
  23. self.pImageView.transform = CGAffineTransformMakeRotation(0.1f); 
  24.  
  25. self.jokerImageView.center = CGPointMake(400.0f, 108.0f); 
  26. self.jokerImageView.transform = CGAffineTransformMakeRotation(0.22f); 
  27. completion:nil]; 
  28.  
  29. [UIView animateWithDuration:0.5f 
  30. delay:1.0f 
  31. options:UIViewAnimationOptionCurveEaseOut 
  32. animations:^ 
  33. //透明度設置為1,顯示游戲菜單。 
  34. self.hostGameButton.alpha = 1.0f; 
  35. self.joinGameButton.alpha = 1.0f; 
  36. self.singlePlayerGameButton.alpha = 1.0f; 
  37. self.helpButton.alpha = 1.0f; 
  38. completion:^(BOOL finished) 
  39. _buttonsEnabled = YES; 
  40. }]; 
  41.  

另外,動畫效果還可以使用completion的回調塊做連接,完成多個動畫效果的連接。

責任編輯:閆佳明 來源: apkbus
相關推薦

2011-08-22 14:21:24

iPhone開發UIView Anim

2011-06-28 10:23:27

UIViewiOS

2011-08-16 18:13:42

IPhone開發UIView動畫

2012-12-24 13:38:01

iOSUIView

2015-07-27 10:27:32

IOS基礎知識核心動畫

2011-07-03 10:05:52

Core Animat

2011-07-22 18:20:04

IOS View 動畫

2011-08-11 10:16:23

iPhoneUIView視圖

2011-08-11 10:27:37

iPhoneUIView視圖

2011-06-13 15:00:00

Cocoa TouchiOS

2011-07-29 09:45:11

iOS 圖形圖像 Core Anima

2011-07-03 10:12:35

Core Animat

2011-08-15 13:50:06

IPhone開發UIView動畫

2011-08-12 11:31:46

iPhoneUIView動畫

2014-12-31 13:31:31

圖形動畫翻頁

2015-01-19 12:19:04

iOS源碼ActionSheet仿QQ音樂

2011-07-03 10:16:45

Core Animat

2011-08-09 17:21:37

2015-03-18 09:29:12

iOS開發爭議

2013-06-04 15:41:31

iOS開發移動開發block
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 毛片av免费看 | 欧美成年人视频在线观看 | 国产在线精品一区二区 | 中文字幕在线一区二区三区 | 国产精品欧美精品 | 99久久精品免费看国产高清 | 丁香五月网久久综合 | 成人在线免费视频 | 久久精品中文字幕 | 国产成人精品一区二区三区网站观看 | 岛国av免费在线观看 | 亚洲福利在线观看 | 九九热这里只有精品在线观看 | 成人av电影在线 | 一区视频 | 久久成人18免费网站 | 国产亚洲一区二区精品 | 欧美精品福利 | 黑人精品欧美一区二区蜜桃 | 成人av一区 | 国产免费av在线 | 逼逼网 | 欧美一级免费黄色片 | 日本成人在线免费视频 | 欧美一区二区三区在线观看 | 一区二区三区免费观看 | 午夜影院操 | 日韩午夜电影 | 成人伊人 | 毛片a区 | 国产乱码精品一区二区三区五月婷 | 久久国内精品 | 精品国产免费一区二区三区演员表 | 欧美成人一区二区三区片免费 | 91在线第一页 | 久久一区二区av | 国产精品久久久久久婷婷天堂 | 99久久久无码国产精品 | 国产激情在线看 | 天天干天天爽 | 日韩福利在线 |