iPhone开发学习笔记通过UIView实现动画效果

移动开发 iOS
IPhone开发学习笔记通过UIView实现动画效果是本文要介绍的内容,UIKit通过封装Core Animation实现了一些常用的动画效果,用起来非常方便。

IPhone开发学习笔记通过UIView实现动画效果是本文要介绍的内容,UIKit通过封装Core Animation实现了一些常用的动画效果,用起来非常方便。使用的方法是通过UIView来声明一个动画块,在这个块中做的任何属性变化,都会呈现动画效果。

具体的语法上有两种写法,这里讲的是老式的写法,IOS4.0后的新写法请参考文档,基本的思路是一样的。具体可以看这个:

  1. http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html 

先说明几个基本的概念,方便理解后面的函数。
   
属性变化: 可以实现动画效果的属性包括位置(frame, bound), 对齐关系,透明度,背景色,内容拉伸,和transform(这个就多了,下面讲)
   
timing curve: 时间曲线,以时间作为横轴,其他值(这里就是指需要变化的属性)作为纵轴。在整个动画持续时间内的函数曲线。
    
ease in/ease out: 慢进/慢出,结合上面的时间曲线的概念,就是在动画开始/或是结束的时候,属性变化会减慢,看下面这个图:是ease in ease out 也是默认的动画效果(不是很好,网上随便找的)如图:

iPhone开发学习笔记通过UIView实现动画效果

liner: 线性变化,这个不讲了,时间变化曲线一共就这两种。默认是EaseInEaseOut,无疑EaseInEaseOut的效果会更加平滑,但是负荷也大些,不过一般问题不大。
fade in /fade out: 淡入, 淡出,是一种动画效果,就是逐渐消失,逐渐出现这种东西。

讲具体的函数前,先举个例子先,

代码

  1.     [UIView beginAnimations:@"ToggleViews" context:nil];      
  2.     [UIView setAnimationDuration:1.0];      
  3.    [UIView setAnimationCurve:UIViewAnimationEaseInOut];      
  4.    // Make the animatable changes.    firstView.alpha = 0.0;      
  5.    secondView.alpha = 1.0;      
  6.    // Commit the changes and perform the animation.      
  7.   [UIView commitAnimations]; 

这段代码就可以实现一个漂亮的淡入淡出的切换了,你所要做的,就是用begin/commit函数圈起一块区域,然后把你想做的变化写进去,无论有多少个,他们都会不被立刻执行,知道commit函数提交。简单的说明下函数:

beginAnimation:context:   两个参数都是给delegate用的,一般nil也没问题,animationID是标示当前动画的名称,在一个代理对应多端动画时用于区别,context是void*,回调函数里常用,用于传递额外的数据,保存上下文,避免使用全局变量。

setAnimationCurve: 这个上面说过了,默认就是UIViewAnimationCurveEaseInOut,不写也可以。

setAnimationDuration:  动画的长度,秒作为单位

再补充个常用的函数,setAnimationRepeatCount: 可以重复动画,有些场景下挺好用的。

如果需要在动画之前或是动画之后做一些操作的话,可以定义代理(就是两个回调函数)。看下面这个例子,在一个动画后面接了另外一个动画,熟悉代理的使用话,就没啥可讲的了。

代码

  1. // This method begins the first animation.  
  2. - (IBAction)showHideView:(id)sender{  
  3.     [UIView beginAnimations:@"ShowHideView" context:nil];      
  4.     [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];      
  5.     [UIView setAnimationDuration:1.0];      
  6.     [UIView setAnimationDelegate:self];      
  7.     [UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];       
  8.     // Make the animatable changes.    thirdView.alpha = 0.0;       
  9.     // Commit the changes and perform the animation.    [UIView commitAnimations];  
  10.   }   
  11.   // Called at the end of the preceding animation.  
  12.   - (void)showHideDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{      
  13.      [UIView beginAnimations:@"ShowHideView2" context:nil];      
  14.      [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];      
  15.      [UIView setAnimationDuration:1.0];      
  16.      [UIView setAnimationDelay:1.0];       
  17.      thirdView.alpha = 1.0;       
  18.      [UIView commitAnimations];} 

接下去要讲view transition的动画效果,就是常见的那种翻页的效果,老版本的写法是这样的:

代码

  1.   //代码摘自iphone基础开发          
  2.   [UIView setAnimationTransition:      
  3.         UIViewAnimationTransitionFlipFromRight   
  4.                 forView:self.view cache:YES];  
  5. [blueViewController viewWillAppear:YES];          
  6. [yellowViewController viewWillDisappear:YES];          
  7. [blueViewController.view removeFromSuperview];          
  8. [self.view insertSubview:yellowViewController.view atIndex:0];          
  9. [yellowViewController viewDidDisappear:YES];          
  10. [blueViewController viewDidAppear:YES]; 

在IOS4.0 之前,要实现view之间切换的动画效果你必须使用父view,然后切换子view,只有子view的效果才能出现动画,所以你看setAnimationTranistion里forView里写的父view。

4.0之后,可以这么写:

代码

  1.     [UIView transitionFromView:(self.view)                         
  2.     toView:(self._view2)                         
  3.     duration:1.0                         
  4.     options:UIViewAnimationOptionTransitionCurlUp                         
  5.     completion:^(BOOL finished) {      
  6.   }     
  7. ]; 

小结:iPhone开发学习笔记通过UIView实现动画效果的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-15 13:50:06

IPhone开发UIView动画

2011-08-22 14:21:24

iPhone开发UIView Anim

2011-07-08 10:15:15

IPhone 动画

2011-08-12 14:04:53

iPhone动画

2011-08-12 11:31:46

iPhoneUIView动画

2011-08-10 14:40:23

iPhone动画

2011-08-19 11:10:31

iPhone应用

2013-07-25 13:43:23

iOS开发学习UIView的Anim

2011-08-09 17:29:29

iPhone文件屏幕

2011-08-15 10:06:22

iPhone开发nib 文件

2011-07-29 13:55:10

IPhone 动画

2011-08-11 10:27:37

iPhoneUIView视图

2011-08-11 10:16:23

iPhoneUIView视图

2011-07-22 18:20:04

IOS View 动画

2011-07-08 15:08:16

iPhone 图片

2011-08-08 14:57:46

iPhone Autoreleas Property

2012-12-24 13:38:01

iOSUIView

2011-08-01 10:01:12

Xcode UIView 动画

2011-08-08 15:56:18

iPhone 震动 NSUserDefa

2011-08-03 16:26:14

iPhone UIView 动画
点赞
收藏

51CTO技术栈公众号