У меня есть проект, в котором события вращения перестают срабатывать после удаления / добавления большого количества view / viewControllers.Это работает некоторое время, а затем случайным образом новое представление, добавленное в окно, никогда не получает shouldAutorotateToInterfaceOrientation: call.
Строка состояния также не вращается, но контроллер вида / представления функционирует нормально (минус вращение).Также к окну одновременно добавляется только один view / 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];
}];