как справиться с заменой представления, когда устройство вращается на iOS - PullRequest
0 голосов
/ 24 февраля 2012

Итак, я следовал следующему руководству по созданию пользовательских представлений, связанных с ориентациями устройств:

http://www.theappcodeblog.com/2011/03/30/orientation-change-tutorial-change-the-view-when-the-orientation-changes/

Чтобы подвести итог статьи, автор может создавать собственные представления для альбомной и портретной ориентаций, указывая на новый вид верхнего уровня в файле XIB при обнаружении поворота устройства.

Поэтому я взял сложную иерархию видов (множество кнопок, ползунки, виды внутри видов), продублировал все на верхнем уровне, чтобы создать альбомный вид. Затем созданы нестандартные аранжировки для ландшафтного вида. В методе, где мой код обнаруживает альбомную ориентацию, мой код указывает на вершину иерархии ландшафта и портрета при обнаружении портрета.

Это работает, за исключением того, что все IBOutlets (UIView, UIButton и т. Д.) В иерархии ландшафта все еще ссылаются на свои эквивалентные объекты в иерархии портретного представления. Я выполняю много специальной обработки этих элементов пользовательского интерфейса во время выполнения, поэтому мне требуются IBOutlets, а не только IBActions. Я обнаружил, что мои скопированные элементы пользовательского интерфейса в альбомной ориентации могут указывать на одни и те же IBActions, но они не могут делить IBOutlets с теми, которые находятся в иерархии портретов.

Должен ли я дублировать все объекты и чтобы мой код управлял всем (выяснил, какие объекты использовать)?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Вот один подход, который может вас устроить.

Если вы загрузите перо с альбомной ориентацией прямо в тот момент, когда вам нужно поменять местами в альбомной ориентации, вы можете передать свой контроллер представления в качестве владельца файла с перьями, и загрузчик пера перезапишет выходные данные контроллера представления на основе соединений в пейзаж пера.

И когда вам снова нужно поменять местами портретное представление, загрузите перо для портрета и передайте контроллер представления в качестве владельца файла. Загрузчик пера снова перезапишет выходы вашего контроллера вида, на этот раз на основе соединений в портретном пике.

Вы должны лениво создать объект UINib для каждого из перьев в первый раз, когда понадобится перо, и держать их рядом, чтобы ускорить загрузку при последующих вращениях.

0 голосов
/ 26 февраля 2012

Я решил это с помощью loadNibNamed. По сути, мне нужно было сохранить состояние всех переменных IBOulet (используя переменные, отличные от IB) и других переменных, которые инициализируются в представлении. Когда загружается новый Nib, все возвращается в состояние по умолчанию. Это довольно раздражает, но сейчас это лучший способ подойти к этому.

...