视图控制器切换动画

  视图翻转动画

 要把导航项目放入到导航栏中,这个目标是通过下面语句实现的,并且要求动画显示:

  1. [flipsideNavigationBar pushNavigationItem:navigationItem animated:NO]; 

导航栏维护一个堆栈,通过发出pushNavigationItem:animated:消息把一个导航项目压栈,发出popNavigationItemAnimated:消息把一个导航项目出栈,当前视图显示的是栈顶的导航项目,所以,压栈可以进入下一级导航项目,而出栈可以返回至上一级导航项目。

toggleView方法是单击主视图的 按钮和背后视图的Done按钮时触发的方法,在该方法中实现了两个视图的切换。在该方法中主要涉及两个知识点,一个是UIView切换问题,另一个是UIView动画问题。两个问题相伴而生,在UIView切换的时候往往伴随着动画发生。下面我们先看看UIView切换问题。

视图切换有很多种方式,可以采用模态视图控制器切换、导航控制器切换和普通视图控制器切换。在本应用中采用的是普通视图控制器切换,它是定义一个根控制器,通过根控制器来控制其他视图交替切换。RootViewController就是根视图控制器,其中有自己的View对象(根视图),当主视图加载时,将主视图作为根视图的子视图放入;当主视图向背后面翻转时,把主视图从根视图中移除,把背后视图作为根视图的子视图放入;当背后面向主视图翻转时,把背后视图从根视图中移除,把主视图作为根视图的子视图放入,这样反反复复。

采用模态视图控制器可以参考苹果官方文档http://developer.apple.com/library/ios/#featuredarti-cles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html 。

下面是toggleView方法的代码,该方法首先执行下面的语句,实现初始化背后视图控制器目的。这里有一个判断,如果FlipsideViewController为nil时候才去发出loadFlipsideView Controller消息,可以防止多重加载。

  1. if (flipsideViewController == nil) {  
  2.     [self loadFlipsideViewController];  
  3. }  

接下来通过下面的语句从视图控制器中获得主视图和背后视图,由于在viewDidLoad方法中创建了主视图控制器,在loadFlipsideViewController方法中创建了背后视图控制器,因此在这里获得的视图对象不会是nil的。 
  1. UIView *mainView = mainViewController.view;  
  2. UIView *flipsideView = flipsideViewController.view; 

在iOS中动画有多种形式,这里的视图翻转是属于UIView级别动画,UIView级别动画必须从[UIView beginAnimations:nil context:NULL]开始到[UIView commitAnimations]结束。在本应用中与UIView级别动画有关的代码如下:
  1. [UIView beginAnimations:nil context:NULL];  
  2. [UIView setAnimationDuration:1];  
  3. [UIView setAnimationTransition:([mainView superview]   
  4.     ? UIViewAnimationTransitionFlipFromRight  
  5.     : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];  
  6. … …   
  7. [UIView commitAnimations];  

setAnimationDuration:语句设置动画持续时间,setAnimationTransition: forView: cache:方法中第一个参数定义动画转变类型,第二个参数是当前视图对象,第三个参数是是否使用缓冲区。动画转变类型是指动画样式,其取值是UIViewAnimationTransition枚举类型。UIViewAnimationTransition的成员有:

UIViewAnimationTransitionNone,不指定过渡类型;

UIViewAnimationTransitionFlipFromLeft,指定从左侧翻转;

UIViewAnimationTransitionFlipFromRight,指定从右侧翻转;

UIViewAnimationTransitionCurlUp,指定向上卷起;

你可能感兴趣的:(动画,UIView)