程序启动后从a ->b ->c
在c页面要求点击某按钮直接跳到a
使用方法:
[self.navigationController popToViewController [self.navigationController.viewControllers objectAtIndex:n] animated:NO];
n为页面的push顺序
跳转失败
提示:Unbalanced calls to begin/end appearance transitions for xxViewController
原因:同一时间进行多次跳转
比如,扫码场景,在a页面点击按钮进行扫码,通常扫码完成后要返回a页面,扫码后通常会调用某代理方法来返回扫码结果,在获取扫码结果后跳转到b页面。
那么这行起来时,如果你想在获取结果后立刻跳转到b页面你会发现出现跳转失败。
解决方法
已扫码场景的例子来说,我们默认的跳转顺序是先返回到a再跳转到b,所以在返回到a页面的语句作修改。
[self.navigationController popToRootViewControllerAnimated:NO];
参考:参考1
页面跳转方向
//设置动画,使跳转方向为从左侧进来
//CATransition 对象创建
CATransition *transition = [CATransition animation];
///时间间隔 1.0f最慢 0.1f最快
transition.duration = 0.5f;
///动画的开始与结束的快慢
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//上一行也可以写为 transition.timingFunction = UIViewAnimationCureEasyInOut;
///设置动画效果
transition.type = kCATransitionReveal ;
/* type的其他类型:
kCATransitionFade 交叉淡化过渡
kCATransitionMoveIn 新视图移到旧视图上面
kCATransitionPush 新视图把旧视图推出去
kCATransitionReveal 将旧视图移开,显示下面的新视图
*/
///设置动画方向
transition.subtype = kCATransitionFromLeft;
/* subtype的其他类型
kCATransitionFromRight; 从右面进来
kCATransitionFromLeft; 从左面进来
kCATransitionFromTop; 从上面进来
kCATransitionFromBottom; 从下面进来
*/
///在想添加CA动画的VIEW的层上添加此代码 addAnimation: forKey:
[self.navigationController.view.layer addAnimation:transition forKey:@"transition"];
//注意:将这些代码加在 navigationController 的 pushViewController:animated: 方法之前,并且加入该代码后要将pushViewController:animated:方法的animated 参数传NO
PSCourierInfoViewController *vc = [[PSCourierInfoViewController alloc] init];
[self.navigationController pushViewController:vc animated:NO];
亲测可用。。。。。
如有问题可留言交流!