Я написал простой контроллер просмотра, который показывает модальное всплывающее диалоговое окно. Поскольку он создает новое окно, чтобы проложить весь экран, я добавил наблюдателя UIDeviceOrientationDidChangeNotification
, который вычисляет, как поворачивать вид, используя CGAffineTransformMakeRotation()
. И это работает.Почему не всегда регистрируется UIDeviceOrientationDidChangeNotification?
В основном. Недостатком является то, что я могу поиграть с ориентацией и заставить его встать боком или перевернуться. Просмотрите номер this 18s video, демонстрирующий проблему. При отладке кажется, что иногда уведомление не срабатывает или, по крайней мере, не вызывает метод обратного вызова, который его прослушивает.
Должно быть, мне что-то не хватает, потому что если вы снова посмотрите на видео, вы заметите, что вид сзади делает правильно вращается. Этот управляется -willAnimateRotationToInterfaceOrientation:duration:
. Как правило, метод контроллера iOS всегда называется правильно (предположительно управляемый наблюдателем UIDeviceOrientationDidChangeNotification
в UIViewController), но мой собственный код не является?
Обратите внимание, что '-presentModalViewController' принимает * контроллер *. События отправляются контроллерам в главном окне. UIWindow содержит массив корневых контроллеров, но по какой-то причине только пересылает эти события в первый элемент в этом списке ...: o ( –
UIDeviceOrientationDidChangeNotification называется слишком много времени. Решение Джима намного лучше. – Vinzius
@ Vinzius-I пытался адаптировать мой класс для использования решения Jim, но не смог заставить его работать. Он по-прежнему будет вращаться соответствующим образом, как вы можете видеть на [видео] (http://www.youtube.com/watch?v=m_IvFAkdfuA) Я отправил его с помощью своего решения. Поверьте мне, я предпочел бы использовать этот подход, чем это обходное решение. – theory