Ладно, я не рад признать, что я сделал пропустил важную часть лабиринта - ориентацию устройства / интерфейса iOS: свойство UISupportedInterfaceOrientations
в файле Info.plist вашего приложения..
Я читал об этом и (ошибочно) предположил, что при указании поддерживаемых ориентаций поведение не изменится.Но, как оказалось, это не просто фильтр уведомлений об ориентации (это не так, вы все равно получаете уведомления для неподдерживаемых ориентаций), но тип / порядок уведомлений различается в зависимости от того, как устройствоориентирован.
В моем случае меня не интересовали ориентации "лицом вверх" и "лицом вниз", поэтому я просто проигнорировал их.Это не хорошая идея.Если вы укажете поддерживаемые ориентации явно:
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
... тогда вы все равно увидите поведение, которое я описал в комментариях выше:
"По сути, устройство притворяется пользователемочень быстро вернул его обратно в вертикальное положение и вернулся вниз. "
... но первая пройденная ориентация не всегда портрет , но правильная ориентация.
Итак, в сценарии, который я опишу в своем вопросе, ориентация устройства будет выглядеть следующим образом:
AT STARTUP: UIDeviceOrientationFaceUp
NOTIFICATION 1: UIDeviceOrientationPortraitUpsideDown <-- CORRECT!
NOTIFICATION 2: UIDeviceOrientationFaceUp <-- CORRECT, BUT IGNORE
Я бы не хотел идти так далеко и называть этоошибка со стороны Apple, но мне непонятно, почему переданная ориентация в NOTIFICATION 1
всегда портрет , если вы не укажете UISupportedInterfaceOrientations
.
Обратите внимание, что это относится только кIPAD.Интерфейс домашнего экрана на iPod Touch и iPhone всегда в портретной ориентации, поэтому легче узнать, какая была эта ориентация при запуске (вы уже догадались: портрет ) ...