У меня есть старое приложение, которое все еще живет на iTunes, написанное на iOS 5. Я хотел бы обновить его для запуска на ios 6 и 7. Все было хорошо до сих пор, и я обновили мой код, чтобы использовать ARC. Однако, пытаясь сохранить ту же философию авторотации, я продолжаю ударять по кирпичной стене. Я уже проверил относительные темы в SO как:willAnimateRotationToInterfaceOrientation не вызывается ios6/7
Forcing landscape and autorotate in iOS 7,
Autorotate in iOS 6 has strange behaviour
и после аналогичной теме я нашел это:
iOS 6 Autorotation Problems and Help
, которые приводят меня сделать следующие:
Я установил rootViewController в пределах m у AppDelegate так:
self.preloadingViewController = [[PreloadingViewController alloc] initWithNibName:@"PreloadingViewController" bundle:nil];
self.window.rootViewController = self.preloadingViewController;
Я поставил:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
в моей AppDelegate. Я перекрываться shouldAutorotate
и supportedInterfaceOrientations
в SuperViewController (родителя с точки зрения наследования) всех UIViewControllers моего приложения (в том числе PreloadingViewController упоминалось выше):
- (BOOL)shouldAutorotate{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
и в каждом ребенке UIViewController, я переопределить
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
с кодом для компоновки элементов ui желательным образом для портретной и альбомной ориентации.
Наконец файл PLIST мое приложение под
поддерживаемым интерфейсом ориентации
содержит:
Портрет (нижняя кнопка домой), Пейзаж (левую кнопку дома), Пейзаж (правая кнопка дома)
все ориентации, которые я хочу поддержать.
Тем не менее, хотя для каждого изменения ориентации на моем корневом контроллере вызываются supportedInterfaceOrientations
и shouldAutorotate
, willAnimateRotationToInterfaceOrientation
никогда не вызывается. Я даже переоценил shouldAutomaticallyForwardRotationMethods
в своем SuperViewController, чтобы вернуть ДА, но безрезультатно.
Что я здесь делаю неправильно? Есть идеи? Я даже считал, что старые xibs типа ios5 вызывают проблему, но я не думаю, что это так.
Заранее спасибо.
Ур viewcontroller видимый? –
willAnimateRotationToInterfaceOrientation: метод больше не вызывается для невидимых контроллеров просмотров. Поэтому, если ваш контроллер просмотра представляет другой, который принимает на себя, только один из них услышит эти уведомления. –
rootViewController не отображается. Хотя я заметил, что только rootViewController получает уведомление об изменениях в ориентации, его 'willAnimateRotationToInterfaceOrientation' никогда не вызывается. –