willRotateToInterfaceOrientation: duration: не вызывается для iOS 5 после увольнения из модального - PullRequest
3 голосов
/ 28 ноября 2011

Мой основной UIViewController переопределяет willRotateToInterfaceOrientation:duration:, чтобы адаптировать фоновый вид для правильной ориентации.Это прекрасно работает, когда вы остаетесь в представлении.

Но в моем приложении результат некоторых действий пользователя может привести к представлению другого "дочернего" UIViewController.Когда пользователь завершает работу с дочерним UIViewController, он обычно возвращается к контроллеру основного представления.Для этого мой код вызывает dismissModalViewControllerAnimated:.

Проблема возникает, когда пользователь меняет ориентацию iPad, когда дочерний UIViewController находится на экране.Тогда основной UIViewController никогда не увидит никакого вызова willRotateToInterfaceOrientation:duration:, и его фоновое представление будет неправильным.

Эта установка прекрасно работает в iOS 4: реализация iOS 4 dismissModalViewControllerAnimated: вызывает UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:, который вызывает willRotateToInterfaceOrientation:duration: для включенного UIViewController.

Видимо, это поведение изменилось для iOS 5.

Каким образом я должен реализовывать изменения ориентации, когда мой вид отключенэкран под iOS5?Например, должен ли я запросить текущую ориентацию в viewWillAppear:?Я так и сделал, и это прекрасно работает, но, возможно, я что-то упустил.

1 Ответ

2 голосов
/ 15 октября 2012

Попробуйте обработать изменение интерфейса через Центр уведомлений следующим образом:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification 
                                           object:nil];

И делать вещи, связанные с интерфейсом, в методе "directionChanged"

...