transitionFromViewController:toViewController:duration:options:animations:completion 方法使用说明

本文介绍iOS5.0新增的transitionFromViewController方法,该方法可在子视图控制器间进行过渡动画。文章展示了如何使用addChildViewController管理和切换子视图控制器,并通过实例代码解释了如何避免快速点击导致页面加载失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS 5.0 以后,苹果新的API增加了transitionFromViewController方法.
该方法希望我们在使用addSubView时,同时调用[self addChildViewController:child]方法,将subView对应的viewController也加入到当前的ViewController管理中.
对于那些暂不需要显示的view,只通过addChildViewController将subViewController添加进去,在需要显示的时候调用transitionFromViewController,将其加入底层的viewController.
使用该方法的好处:
1.使页面逻辑更加明了,相应的view对应相应的viewController.
2.当某个子view没有显示时,将不会被load,减少内存的使用.
3.当内存紧张时,没有load的view将会首先被释放,优化了程序的内存释放机制.

- (void)viewDidLoad {
    [super viewDidLoad];
    FirstViewController *firstVC = [[FirstViewController alloc]init];
    SecondViewController *secondVC = [[SecondViewController alloc]init];
    [self addChildViewController:firstVC];
    [self addChildViewController:secondVC];
    [self.view addSubview:[self.childViewControllers[0] view]];
}

fromViewController:当前显示在父视图控制器中的子视图控制器
toViewController:将要显示的子视图控制器
duration:完成过渡的时间 单位:秒
options:指定的过渡效果
animations:转换过程中的动画,是个block块操作
completion:过度完成后,执行的block操作

if (index == 0) {
     [self transitionFromViewController:self.childViewControllers[1] toViewController:self.childViewControllers[0] duration:0 options:0 animations:0 completion:^(BOOL finished) {
     /*
     在项目中使用addChildViewController添加,但是发现当点击切换时有时如果点击过于频繁或者速度过快,就会出现页面加载不出来的情况.使用下面的方式便能完美解决.
     */
     /**********************************/
                if (finished) {
                    [self.view addSubview:[self.childViewControllers[0] view]];
                } else {
                    [self.view addSubview:[self.childViewControllers[1] view]];
                }
     /**********************************/  
            }];
} else if (index == 1) {
     [self transitionFromViewController:self.childViewControllers[0] toViewController:self.childViewControllers[1] duration:0 options:0 animations:0 completion:^(BOOL finished) {
                if (finished) {
                    [self.view addSubview:[self.childViewControllers[1] view]];
                } else {
                    [self.view addSubview:[self.childViewControllers[0] view]];
                }
            }];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值