我有一个项目,在删除/添加大量视图/视图控制器后,旋转事件停止启动。它工作了一段时间,然后随机添加到窗口的新视图永远不会得到shouldAutorotateToInterfaceOrientation:调用。
状态栏也无法旋转,但视图/视图控制器功能正常(减去旋转)。此外,一次只有一个视图/viewController添加到窗口中。我假设一个旧的viewController被注册为键,但添加到窗口的所有东西都是viewController的子类,并且除了活动的子类之外,没有任何子类显示在仪器分配中。
有没有办法在应用程序代理或窗口上找到哪个视图控制器是关键?
是否有其他原因导致shouldAutorotateToInterfaceOrientation:无法被调用?
每个视图控制器都在实现:
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation { return YES; }
- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)
interfaceOrientation duration: (NSTimeInterval) duration {
//manual rotation code
}
以下是我在应用程序委托中使用的代码,用于更改根视图控制器和显示的视图。
[UIView transitionWithView:new.view
duration:0.3
options:UIViewAnimationOptionCurveEaseOut
animations:^{
//add new view
[self.window addSubview:new.view];
//play transition animation for old and new views
new.view.transform = CGAffineTransformConcat(new.view.transform, newEnd);
old.view.transform = CGAffineTransformConcat(old.view.transform, oldEnd);
//if old view is a "modal style" then keep it in front on new view
if([old conformsToProtocol:@protocol(PreloadableModalView)]) {
[self.window bringSubviewToFront:old.view];
}
}
completion:^(BOOL finished){
//remove old view
[old removeSubviews];
[old.view removeFromSuperview];
}];