В моето приложение за iPhone имам изглед, който искам да показвам само в портретен режим. Когато навигирате до този изглед, той трябва автоматично да се показва в портретен изглед. Когато навигирате, ориентацията трябва да се върне към предишната или, ако ориентацията на устройството се е променила, да се адаптира към това. Мога да намеря информация за налагане на ориентация и предотвратяване на автоматично завъртане. Не можах да намеря нищо относно как да променя обратно правилната ориентация, след като навигирам извън този изглед.
Така че идеята ми беше да
- запазете първоначалната ориентация (запазете в
currentOrientation
) - абонирайте се за събитие за промяна на ориентацията, за да следите промените в ориентацията, докато съдържанието е заключено към портрет (актуализация
currentOrientation
) - когато напускате изгледа, възстановете правилната ориентация, като използвате стойността
currentOrientation
.
Редактиране (кодът вече е премахнат): Освен че не работи, това беше опасен начин, тъй като използваше широко неподдържани API.
Редактиране:
Вярвам, че този въпрос сега може да се сведе до следното:
Има ли документиран, поддържан начин за налагане на ориентацията на интерфейса независимо от ориентацията на устройството?
setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")
е препоръчван много пъти на SO и другаде, но наистина изглежда, че е неподдържан хак.Има ли документиран, поддържан начин за актуализиране на ориентацията на интерфейса към ориентацията на устройството? Това би било необходимо за „възстановяване“ от принудителната ориентация на интерфейса в друг изглед, без да се налага да задействате автоматично завъртане чрез завъртане на устройството напред и назад.
Поддържат се supportedInterfaceOrientations()
и shouldAutorotate()
. Но те ще заключат ориентацията на интерфейса само след като устройството е обърнато в тази позиция. Те не предотвратяват грешна първоначална ориентация.
Има много въпроси, подобни на този, които показват, че тази настройка на проблема не е необичайна, но досега няма задоволително и пълно решение с помощта на поддържани методи.
setValue(… forKey: "orientation")
, защото той е недокументиран и се поддържа. Трябва да можете да постигнете това, което искате, като използватеsupportedInterfaceOrientations()
,shouldAutorotate()
иattemptRotationToDeviceOrientation()
. - person Aaron Brager   schedule 03.07.2015setValue()
се използва за принудително изглед към портрет, когато е отворен, докато устройството е в пейзаж.supportedInterfaceOrientations()
иshouldAutoRotate()
не се погрижиха за това. Трябваше първо да завъртя устройството в портретен режим и след това изгледът беше заключен в портретен режим. Намерих няколко препратки към методаsetValue()
, което, разбира се, не го прави добра практика. Как иначе мога да го постигна? - person jerry   schedule 03.07.2015