在iOS中切换控制器和视图

时间:2013-01-22 20:44:57

标签: ios xcode cocoa

我的项目中有以下控制器和视图:

PortraitController.m
PortraitView.xib
LandscapeController.m
LandscapeView.xib

人像控制器用作纵向视图的控制器,和 横向控制器用作横向视图的控制器。

我需要切换BOTH控制器并查看设备方向何时发生变化。 Apple建议采用这种方法,但它们没有提供可用的一般示例!

我找到了各种各样的例子,但它们并不是我需要的东西 - 一个控制器+同一个xib中的两个视图,从导航控制器推送+弹出,将第二个视图放在上一个,...其中没有一个是我需要的

当设备方向发生变化时,在这两个Controller + View组合之间切换(带动画)的最简单方法是什么?

是否有适用于iOS 5和iOS 6的解决方案?

2 个答案:

答案 0 :(得分:3)

Apple提供的示例使用Storyboard的segue机制从一个视图转到另一个视图,如果您使用的是需要使用UINavigationViewController方法的NIB文件,您甚至可以设置要从一个视图转换的转换UIControllerView到另一个

例如,此代码将从一个UIViewController切换到另一个页面转动动画

[UIView  beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController:yourViewController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:navController.view cache:NO];
[UIView commitAnimations];

要实现知道何时推送一个视图或另一个视图的事实(或者如果切换到故事板,则使用segue),您可以注册以从导航控制器或当前视图中侦听UIDeviceOrientationDidChangeNotification事件,以注册某个方法处理屏幕旋转,例如

-(void)viewWillAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToChangeViewController) name:UIDeviceOrientationDidChangeNotification object:nil];

}

-(void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}

取消注册活动非常重要

希望这可以为您提供有关如何实现您的目标的一些见解

答案 1 :(得分:1)

这是解决问题的好方法: Rotating to Show Different iOS Views。 使用NSNotificationCenter,您可以管理旋转事件并按下/弹出控制器,或更改所需的任何视图。 希望这可以帮到你。