Как поддерживать как книжную, так и альбомную ориентацию с помощью файлов XIB? - PullRequest
3 голосов
/ 09 ноября 2010

Мне интересно иметь UIViewController, который поддерживает все ориентации и чисто использует два файла xib для настройки своих подпредставлений.

Одна из возможностей, по-видимому, заключается в использовании метода loadNibNamed: NSBundle для загрузки новой иерархии представлений при каждом повороте, но это кажется неэффективным и может иметь нежелательные побочные эффекты. Например, после перезагрузки из файла пера все мои представления потеряли свое предыдущее состояние, например, добавление текста в текстовое поле и т. Д.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

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

Я решил создать такой метод:

// This is for an iPad root-level view controller.
- (void)setupForOrientation:(UIInterfaceOrientation)orientation {
  if (UIInterfaceOrientationIsPortrait(orientation)) {
    CGRect bounds = CGRectMake(0, 0, 768, 1004);
    bkgImageView.frame = bounds;
    // Other view positioning for portrait.
  } else {
    CGRect bounds = CGRectMake(0, 0, 1024, 748);
    bkgImageView.frame = bounds;
    // Other view positioning for landscape.
  }
  [self drawBackgroundForOrientation:orientation];
}

Этот метод вызывается из метода shouldAutorotateToInterfaceOrientation: и передает новую ориентацию.

1 голос
/ 29 января 2012

Вместо вызова вашей функции из shouldAutorotateToInterfaceOrientation, где вам просто нужно сказать «ДА» или «НЕТ», вы действительно должны выполнять свои функции в функциях делегатов, таких как willRotateToInterfaceOrientation, которые предназначены для того, чтобы делать то, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...