0

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

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

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

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

我找到了各种示例,但它们并不是我所需要的 - 一个控制器 + 同一个 xib 中的两个视图,从导航控制器推送 + 弹出,将第二个视图放在前一个视图上,......它们都不是我需要的。

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

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

4

2 回答 2

3

Apple 提供的示例使用 Storyboard 的 segue 机制从一个视图转到另一个视图,如果您使用的是 NIB 文件,则需要使用 UINavigationViewController 方法,您甚至可以设置要从一个 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];
}

取消注册活动非常重要

希望这可以让您对如何实现您的目标有所了解

于 2013-01-22T21:00:10.567 回答
2

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

于 2013-01-31T23:16:33.733 回答