Мое приложение для iPhone отображает некоторое нечетное поведение при выполнении на iPad относительно поддержки изменений ориентации.
Приложение запускает с целью контроллер (назовите его, просматривают ради аргумента), и контроллер навигации, и shouldAutorotateToInterfaceOrientation возвращает ДА для портрета только. На контроллер навигации я продвигаю контроллер представления (представление B), которое также возвращает ДА для портрета только. Затем я продвигаю другой контроллер представления (представление C) на военно-морской контроллер, который поддерживает все вращения и корректирует объекты на экране на основе ориентации для вращения к.
Когда это выполняется на средстве моделирования iPhone и устройстве, если Вы вращаетесь, чтобы благоустроить выставленный для обозрения C и затем коснуться кнопки "Назад" для возврата к представлению B, это делает правильную вещь и смещает представление B назад к режиму портрета. (В средстве моделирования это даже поворачивает средство моделирования назад к портрету автоволшебно.)
Проблема, которую я испытываю, состоит в том, что, когда я делаю эту точно ту же самую последовательность событий на средстве моделирования iPad и устройстве, представление B, которое появляется, не повернуто назад к портрету, и военно-морской контроллер все еще показывает информацию для представления C. Затем я касаюсь на кнопке "Назад", и представление остается таким же, но военно-морские шоу контроллера, нормальные для представления B (но все все еще в альбомном режиме). Затем если я касаюсь кнопки "Назад" снова, представление A появляется при представлении B, военно-морские объекты панели, и наконец касающийся назад снова помещают меня выставленный для обозрения с военно-морской панелью объекты.
Если я перехожу к представлению B о iPad и начинаю вращаться вокруг, shouldAutorotateToInterfaceOrientation огни без того, пока я не достигаю режима портрета и затем всех возвратов к нормальному.
Приложение создается с последней выпущенной версией iPhone SDK и имеет настройки сборки следующим образом: Основывайте SDK iPhone Simulator 4.0, Семейство Целевых устройств iPhone, Цель Развертывания iPhone OS iPhone OS 3.1.3.
Какие-либо идеи?
Apple заявляет:
Случай: Все контроллеры дочерних представлений в вашем UITabBarController или UINavigationController не согласовывают общий набор ориентации.
Ответ: Чтобы убедиться, что все ваши дочерние контроллеры представлений вращаются правильно, вы должны реализовать shouldAutorotateToInterfaceOrientation для каждого контроллера представления, представляющего каждую вкладку или уровень навигации. Каждый должен согласовать одну и ту же ориентацию, чтобы поворот произошел. То есть все они должны вернуть YES для одинаковых позиций ориентации.
http://developer.apple.com/iphone/library/qa/qa2010/qa1688.html
Вы можете установить ориентацию устройства в контроллере навигации, а не в отдельных представлениях. Затем вы можете проверить, какой вид находится в стеке, и повернуть его в зависимости от результата. Таким образом, навигационный контроллер также обрабатывает всю ориентацию.
Вот код, который я использую для предотвращения этой ошибки:
- (void)viewDidLoad {
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];
}
и
- (void)viewDidLoad {
if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(-(M_PI / 2));
self.view.bounds = CGRectMake(0, 0, 320, 480);;
}
[UIView commitAnimations];
}
В зависимости от ориентации устройства, вам нужно будет изменить часть кода.