这是一个非常偷偷摸摸的方法,我编码在本周末用于我的应用程序。把这段代码放到活动视图控制器(即表格视图)中,该控制器想要用右向左转换伪“推”新的视图控制器。准备新的ViewController然后调用它。 与标准从左到右过渡略有不同的是,标题栏不生成动画,它在之后交换。 您“借用”了新的视图控制器,并使其成为活动视图控制器的孩子足够长的时间来完成动画,然后将它们放回原样。 Apple对UINavigationController规则非常具体,实际上对订单的任何更改或推送和弹出逻辑都会引发异常,所以有相当数量的试验和错误。
-(void) showVC:(UIViewController *) nextVC rightToLeft:(BOOL) rightToLeft {
[self addChildViewController:neighbor];
CGRect offscreenFrame = self.view.frame;
if(rightToLeft) {
offscreenFrame.origin.x = offscreenFrame.size.width * -1.0;
} else if(direction == MyClimbDirectionRight) {
offscreenFrame.origin.x = offscreenFrame.size.width;
}
[[neighbor view] setFrame:offscreenFrame];
[self.view addSubview:[neighbor view]];
[neighbor didMoveToParentViewController:self];
[UIView animateWithDuration:0.5 animations:^{
[[neighbor view] setFrame:self.view.frame];
} completion:^(BOOL finished){
[neighbor willMoveToParentViewController:nil];
[neighbor.view removeFromSuperview];
[neighbor removeFromParentViewController];
[[self navigationController] pushViewController:neighbor animated:NO];
NSMutableArray *newStack = [[[self navigationController] viewControllers] mutableCopy];
[newStack removeObjectAtIndex:1]; //self, just below top
[[self navigationController] setViewControllers:newStack];
}];
}
谢谢,虽然它不完全是最优雅的解决方案(我希望苹果只会在他们的用户界面上支持双向)。您的解决方案的确为那些希望替换标准UINavigtionController的人节省了时间。 我最终做的是继承UINavigtionController并重写push和pop方法,使用不带动画的另一个“假”控制器并用动画弹出它(导致反向推动画)的技巧,我还在左边使用了自定义NavigationItems,右侧复制后退按钮。 – Barak