我的视图控制器没有响应didRotateFromInterfaceOrientation
,尽管我在代码中添加了以下内容:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.popOver dismissPopoverAnimated:NO];
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
... My Custom Code...
}
}
我在这里做错了吗?
答案 0 :(得分:3)
如果你不能从UIViewController继承(这是不幸的),你可以使用this:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
然后注册以开始接收UIDeviceOrientationDidChangeNotification
通知。
答案 1 :(得分:2)
如果你的UIViewController是某个根视图中的子节点,那么IB默认情况下不会将它作为子控制器添加到根控制器。解决此问题的最简单方法是修改根控制器:
- (void)viewDidLoad
{
[super viewDidLoad];
[self addChildViewController:(UIViewController*) self.yourChildController];
}
这应该可以解决问题。现在您的子控制器将同时接收:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
和
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
消息。
答案 2 :(得分:0)
我认为这里真正的答案(更准确地说是关联问题的答案)是你需要打电话
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
在didRotateFromInterfaceOrientation
方法的子类实现中。例如:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
// Then your code...
}
苹果文档中没有提到这一点,但在省略时会给我带来一些严重且无法解释的问题...