Как стать автором
Обновить

Комментарии 15

Прошу прощения, возможно я что-то не уловил, не могли бы вы привести конкретный пример для случая когда в универсальном приложении для iPhone запретить смену ориентации девайса, а для iPad, само собой, разрешить?
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// возвращаем значения для iPad
}
else {
// и не iPad
}
Если только для iOS6 и для всего приложения, то достаточно просто в Targets — Summary — iPhone/iPod Deployment Info — Supported Interface Orientations и iPad Deployment Info — Supported Interface Orientations выбрать нужные поддерживаемые ориентации для соответствующих устройств.

В других случаях — нужно воспользоваться одним из приведенных в статье методов и в контроллерах, где необходимо ограничить/разрешить смену ориентации, использовать проверку типа устройства (например, так, как предложил Stam).
За разрешение UIInterfaceOrientationPortraitUpsideDown на айфоне/айподе предлагаю расстреливать — ни разу не сталкивался с ситуацией, в которой это положение имело бы смысл, но очень часто матерюсь, а иногда вовсе сношу приложения, которые позволяют экрану переворачиваться «кверхногами» — очень неудобно пользоваться ими лёжа.
Бывает ситуация, когда штекер (например зарядка в машине) не позволяет держать устройство в обычном UIInterfaceOrientationPortrait режиме. В таком случае UIInterfaceOrientationPortraitUpsideDown позволяет воспользоваться приложением. Я бы так критично не относился к дополнительному перевороту, а просто блокировал бы изменения режима, благо это легко включается/выключается.
К ответу makoomazan еще добавлю: в iPhone 5 разъем для наушников перенесли на нижнюю грань, что увеличивает количество ситуаций, когда UIInterfaceOrientationPortraitUpsideDown вас выручит.
Ок, спасибо за найденные варианты использования айфона «кверхногами».

Новый вариант: «За неотключаемое UIInterfaceOrientationPortraitUpsideDown в программах-чатиках и программах-читалках (которые изначально не предназначены для использования в кредле за рулём автомобиля) на айфоне/айподе предлагаю лишать сладкого. Программы-навигаторы имеют право переворачиваться, как им вздумается» :)
Автор, вы уверены что там именно логическое умножение?
app_mask && topmost_controller_mask
Детально тему не изучал, но из изложенного вами там никак && не может быть, это было бы лишено всякого смысла. Должно быть именно bitwise and
app_mask & topmost_controller_mask
Вы правы. Хотя документация и говорит «At any given time, the mask of the topmost view controller is logically ANDed with the app’s mask to determine what orientations are permitted» — действительно, смысл тут есть только при использовании побитовой операции.

В момент написания в 4 часа ночи мой сонный мозг не придал этому значения. Спасибо за замечание, внес исправления в статью.
> Хотя документация и говорит

Они там пишут про «the mask… is logically ANDed», mask это уже указание на побитовые операции, добавление bitwise это уже будет как масло масляное.
За статью спасибо, но мне кажется, можно было бы изложить как-то покороче. Более в виде справочника и best practices. Или код разместить выше — чтобы его можно было быстро скопипастить себе в проект, а уж если захочется теории — почитать дальше.

Например, на том же StackOverflow я часто даже не читаю полностью вопрос, а сразу начинаю читать ответ для экономии времени.
StackOverflow достаточно часто дает fast fix'ы или даже workaround'ы и не претендует на полноту изложения вопроса.

Поэтому спасибо автору за такое полное описание проблемы и несколько решений!
Мне в iOS почти всё нравится больше и кажется удобнее, чем в Android, но только не Autorotation. Мой личный список грехов Apple:

— iTunes;
— developer.apple.com/membercenter;
— autorotation.
У iOS 6 наблюдается замечательный баг: приложение может только Landscape, запускает авторизацию Game Center, который в свою очередь хочет Portrait, на 5 GC поворачивался, на 6 приложение падает.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории