分享

UIViewController 可以添加过渡动画了

 quasiceo 2015-04-03

UIViewController 可以添加过渡动画了

下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。
AD:

在iOS5中,ViewController中新添加了下面几个方法:
    1.    addChildViewController: 
    2.    removeFromParentViewController 
    3.    transitionFromViewController:toViewController:duration:options:animations:completion:
    4.    willMoveToParentViewController: 
    5.    didMoveToParentViewController:
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:

点击其中的按钮如下:

下面详细介绍一下上述效果的实现:
    .    创建项目,changeViewController。
    .    添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:

3.把MainViewController添加到window中。
    1.    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    2.    { 
    3.        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    4.        // Override point for customization after application launch. 
    5.        MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
    6.        self.window.rootViewController=mainViewController; 
    7.        [self.window makeKeyAndVisible]; 
    8.        return YES; 
    9.    }
4.在MainViewController中添加三个按钮,并且连接onClickbutton方法。
5.在MainViewController中添加三个子controller
    1.    #pragma mark – View lifecycle - (void)viewDidLoad 
    2.    { 
    3.        [super viewDidLoad]; 
    4.        // Do any additional setup after loading the view from its nib. 
    5.        
    6.        FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
    7.        [self addChildViewController:firstViewController]; 
    8.        
    9.        SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    10.        [self addChildViewController:secondViewController]; 
    11.        
    12.        
    13.        ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil]; 
    14.        [self addChildViewController:thirdViewController]; 
    15.        
    16.        [contentView addSubview:thirdViewController.view]; 
    17.        currentViewController=thirdViewController; 
    18.    }

其中要把其中的一个子controller的view添加到根视图中,这样才能显示出相应的视图。
6.点击按钮,切换视图。
    1.    -(IBAction)onClickbutton:(id)sender 
    2.    { 
    3.        FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0]; 
    4.        ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2]; 
    5.        SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1]; 
    6.        if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) { 
    7.            return; 
    8.        } 
    9.        UIViewController *oldViewController=currentViewController; 
    10.        switch ([sender tag]) { 
    11.            case 1: 
    12.            { 
    13.                NSLog(@"留言及回复"); 
    14.                [self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 
    15.                }  completion:^(BOOL finished) { 
    16.                    if (finished) { 
    17.                        currentViewController=firstViewController; 
    18.                    }else{ 
    19.                        currentViewController=oldViewController; 
    20.                    } 
    21.                }]; 
    22.    } 
    23.                break; 
    24.            case 2: 
    25.            { 
    26.                NSLog(@"生日提醒"); 
    27.                [self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{ 
    28.                    
    29.                }  completion:^(BOOL finished) { 
    30.                    if (finished) { 
    31.                      currentViewController=secondViewController; 
    32.                    }else{ 
    33.                        currentViewController=oldViewController; 
    34.                    } 
    35.                }]; 
    36.            } 
    37.                break; 
    38.            case 3: 
    39.            { 
    40.                NSLog(@"好友申请"); 
    41.                [self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{ 
    42.                    
    43.                }  completion:^(BOOL finished) { 
    44.                    if (finished) { 
    45.                         currentViewController=thirdViewController; 
    46.                    }else{ 
    47.                        currentViewController=oldViewController; 
    48.                    } 
    49.                }]; 
    50.            } 
    51.                break; 
    52.            default: 
    53.                break; 
    54.        } 
    55.    }
其中我把按钮设置成不同的tag了。
这时候点击按钮,就可以切换子视图了。
这样写的好处: 多个UIViewController之间切换可以添加动画 当内存警告的时候,可以把当前不是激活状态的ViewController内存释放。
可以把代码更好分开 项目源代码:http://easymorse-iphone./svn/trunk/changeViewController/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多