手动路由willRotateToInterfaceOrientation调用

时间:2011-08-24 18:43:52

标签: iphone objective-c ios cocoa

我有多个UIViewControllers,他们的视图通过使用添加子视图相互嵌套。我只是让我的所有视图都自动改变方向,除了一个。堆栈末尾的那一个。我还意识到 willRotateToInterfaceOrientation 方法不会传播到子视图控制器。什么是处理这个的最好方法?我应该尝试手动将呼叫路由到子视图吗?

不旋转的终端控制器是从样本照片查看器应用程序PhotoViewController中获取的,它依赖于被调用的 willRotateToInterfaceOrientation 方法。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

在iOS 5之前,您必须将所有4个主要旋转方法都路由下来。这包括

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration;
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

要正确实现此类包容,您还需要路由UIView生命周期方法:

- (void)viewDidLoad;
- (void)viewDidUnload;
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated; 
- (void)viewDidDisappear:(BOOL)animated;

答案 1 :(得分:3)

对于iOS 4.3及更早版本,路由willRotateToInterfaceOrientation(和其他此类方法)的调用是完全没错的做法。问题是视图控制器没有概念是其他视图控制器的子视图控制器。

在iOS 5中,引入了容器视图控制器的概念(事实证明UINavigationController和UITabBarController一直是特殊的“容器视图控制器” - 注意这些视图控制器已经将这些方法路由到您自己的视图控制器! )。容器视图控制器的概念形式化了从父视图控制器到子视图控制器的路由方法(例如willRotateToInterfaceOrientation)的想法。

您应该查看“UIViewController”类参考文档的“实现容器视图控制器”部分。 iOS5目前处于开发者预览版中,因此您需要成为注册的iOS开发人员才能访问它。从iOS5开始,这将是解决您所描述的问题的首选方式。