zoukankan      html  css  js  c++  java
  • 在两个页面间翻转设置Animation动作的一些总结

    今天碰到两个页面之间翻转的动作设计问题,发现了一些问题,故做个总结,很多都写在注释部分:

    1、首先,我们来手动创建两个view以及相应的viewController。是手动,不是用IB

    (1)刚开始只加载一个view(第二个),若两个同时加载,第二个页面可能不能完全被遮挡。第二个页面可以通过翻转来显示。

    	[window addSubview:secodViewController.view];
    

    2、要求:每个view页面都有一个按钮,按下之后切换到另一个页面,要求有炫一点的切换效果,故要对Animation属性进行一些设置

     (1)helloWorldViewController.m:

     1
    2 mySecondViewController *SecondViewController;
    3 - (void) btnClicked:(id)sender
    4 {
    5 SecondViewController=[[mySecondViewController alloc]
    6 initWithNibName:@"SecondViewController"
    7 bundle:nil];
    8
    9 //---创建一个翻转页面的动画---
    10 //---这个动画的forView属性是UIView,应用与整个view,跟有几个页面无关,只有一个页面仍旧有效果出来---
    11 [UIView beginAnimations:@"flipping view" context:nil];
    12 [UIView setAnimationDuration:1];
    13 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    14 [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft//与Left相对
    15 forView:self.view.superview cache:YES];//forView:UIView
    16
    17 //---remove the current view; essentially hiding the view---
    18
    19 [self.view removeFromSuperview];
    //不加这句也可以正常运行,不过程序会一直叠加view,内存浪费!
    21 [UIView commitAnimations];//执行动画
    22
    23
    24 }

    (2)secondViewController.m:

     1 -(IBAction) btnClicked:(id)sender
    2 {
    3 helloWorldViewController=[[helloWorldApp alloc]initWithNibName:@"helloWorldApp"
    4 bundle:nil];
    5 //实例化一个控制器,因为下面addSubView要用到
    6 UIAlertView *alert=[[UIAlertView alloc]initWithTitle:nil
    7 message:@"你按了SecondView的按钮!"
    8 delegate:self
    9 cancelButtonTitle:@"done"
    10 otherButtonTitles:nil];
    11 [alert show];
    12 [alert release];
    13 //---创建一个翻转页面的动画---
    14 [UIView beginAnimations:@"flipping view" context:nil];
    15 [UIView setAnimationDuration:1];
    16 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    17 [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight//与Left相对
    18 forView:self.view.superview cache:YES];
    19
    20 //---remove the current view; essentially hiding the view---
    21 [self.view addSubview:helloWorldViewController.view];
    22
    23 [UIView commitAnimations];//执行动画
    24
    25
    26 }

    UIView是UIWindow、UIScrollBar等的超类,所以这里的self.view.superview就是UIView。所以这里的Animation动画是针对UIView而言的,而不是当前view页面,我觉得这点是最关键的。只有理解了这点,对与该remove还是addsubview就不会晕了。

    其实,道理很简单,用土话总结一下:先加载ViewB->在ViewB的Action里面设置好动画,把ViewA加到ViewA (addSubView)->转到了ViewA,设置动画,removeFromSuperView(这里的super就是指ViewA,因为刚刚是SubView,Sub,子,与父对应)->转到ViewA.....循环下去。用更土的话讲,就是第二加载的View要自杀完才回到第一加载的View。

    OVER,以后再慢慢加深理解

  • 相关阅读:
    [Linux 流量管理] Cacti的插件安装和使用
    expdp impdp 数据库导入导出命令详解
    Dropping all user tables/sequences in Oracle
    Oracle RMAN 的 show,list,crosscheck,delete命令整理
    EXP00041错误,遇到字符集问题的解决方式
    ORA00312的解决方法
    如何禁止MSN传递文件
    如何解决Parallel query大于1的问题
    bzoj5028小Z的加油店(线段树+差分)
    [转]C# 互操作性入门系列(三):平台调用中的数据封送处理
  • 原文地址:https://www.cnblogs.com/wengzilin/p/Animation.html
Copyright © 2011-2022 走看看