Полагаю, вы скопировали этот код из этого урока . Это показывает опасность простого копирования и вставки кода из случайного человека в Интернете.
Есть несколько проблем с этим кодом. Во-первых, есть проблема, которую вы описываете здесь, когда уведомление UIDeviceOrientationDidChangeNotification
передает UIDevice, чей метод -orientation
возвращает перечисление UIDeviceOrientation
. По какой-то причине автор этого кода присваивает это значение перечислению UIInterfaceOrientation
, а не рассматривает его как значение UIDeviceOrientation
. Это можно исправить, используя соответствующий тип перечисления и сравнивая с этими значениями.
Во-вторых, почему они используют уведомление об изменении ориентации, когда они так же легко могут использовать метод делегата UIViewController -didRotateFromInterfaceOrientation:
? Это действительно перечисление UIInterfaceOrientation
. Я рекомендую заменить уведомление и метод ответчика выше на -didRotateFromInterfaceOrientation:
. О том, как это сделать, можно узнать во многих примерах Apple по поводу авторотации контроллера представления, а также об их документации.
В-третьих, если они собираются, чтобы метод отвечал на уведомление, как в -orientationChanged:
выше, он должен принимать объект NSNotification, а не просто общий идентификатор.