Как создать контроллер представления, который поддерживает как альбомную, так и портретную ориентацию, но не вращается между ними (сохраняет свою первоначальную ориентацию) - PullRequest
0 голосов
/ 05 января 2011

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

Я попытался создать ивар initialOrientation и установить его в -viewDidAppear с помощью

initialOrientation = self.interfaceOrientation;

тогда

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == initialOrientation);
}

Но это вызывает непонятные проблемы (вероятно, потому что -shouldAutorotateToInterfaceOrientation вызывается раньше -viewDidAppear).

Как я могу зафиксировать ориентацию в исходной ориентации?

Ответы [ 2 ]

1 голос
/ 05 января 2011

Я был на правильном пути, я думаю.Я решил это, сделав initialOrientation свойство, а затем установив его из вызывающего viewController:

OrientationLockedViewController *vc = [[OrientationLockedViewController alloc] init];
vc.initialOrientation = self.interfaceOrientation;

Теперь у меня есть OrientationLockedViewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == self.initialOrientation);
}
0 голосов
/ 05 января 2011

Это немного странное требование, и я думаю, что UIKit не предназначен для этого. Я не думаю, что документально подтверждено, когда UIKit будет вызывать -shouldAutorotateToInterfaceOrientation или как долго он может кэшировать эти результаты, поэтому я вижу две возможности, если это поведение важно.

  1. Установите initialOrientiation раньше, когда вы запускаете контроллер вида, если не раньше, чтобы ваше поведение -shouldAutorotateToInterfaceOrientation никогда не менялось, но приложение будет учитывать ориентацию, в которой оно запущено.

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

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