Есть ли способ изменить ориентацию интерфейса на iPhone?
Я знаю, как разрешить/запретить ориентацию для поворота с помощью
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Однако теперь у меня проблема, когда телефон может быть в портретном (или увеличенном), и в какой-то момент я хочу повернуть экран так, как если бы пользователь повернулся к пейзажу. На данный момент я не хочу, чтобы autorotate работал больше. Я хочу заставить ориентацию интерфейса оставаться в ландшафте. Есть ли способ сделать это? Вероятно, я могу найти взломы для отключения авторотации, но, в первую очередь, заставляя вращение, я понятия не имею, как это сделать.
Вот что я пытаюсь сделать:
-
Приложение поворачивается на любую ориентацию. Все нормально.
-
Происходит событие.
-
Теперь авторотация работает только для пейзажа и ландшафта. Более того, если пользователь находится в портретном или портретном режиме, я программно поворачиваю на ландшафт, чтобы заблокировать пользователя в этой ориентации.
Просто для того, чтобы сделать вещи сложнее, я хочу выпустить UIAlertView
(я знаю, как это сделать) перед принудительной ротацией, позволяя пользователю узнать, что происходит, и я хочу, чтобы экран позади alertView поворачивался, но а не alertView. Возможно ли это?
Спасибо.
Ответы
Ответ 1
Лучшее решение для вашей ситуации - уведомить пользователя о том, чтобы превратить его в альбомную ориентацию и приостановить программу, пока пользователь не переключит ориентацию. А затем, когда пользователь поворачивает устройство, вы можете обрабатывать методы делегата и запускать отображение экрана в ландшафтном режиме. Этот подход был рассмотрен во многих приложениях приложений для приложений и выглядит так, что это один из лучших способов получить одобренное приложение в магазине приложений. Надеюсь, это имеет смысл.
Ответ 2
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
// orientation view swapping logic
- (void)didRotate:(NSNotification *)notification {
UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation];
if (newOrientation != UIDeviceOrientationUnknown || newOrientation != UIDeviceOrientationFaceUp || newOrientation != UIDeviceOrientationFaceDown)
{
orientation = newOrientation;
}
// Write your orientation logic here
if ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight))
{
// Clear the current view and insert the orientation specific view.
[self clearCurrentView];
[self.view insertSubview:yourLandscapeView atIndex:0];
} else if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
{
// Clear the current view and insert the orientation specific view.
[self clearCurrentView];
[self.view insertSubview:yourPortraitView atIndex:0];
}
}
и добавьте это уведомление в событие
Ответ 3
Вы не можете. По крайней мере, не так, как позволит Apple. Авторизация предназначена для всех приложений. Вы можете сделать код, который вращает представление вручную, но что касается UIDevice, вы будете в той же ориентации.
Ответ 4
В соответствии с Apple, если вы не хотите, чтобы поведение по умолчанию предоставлялось API-интерфейсом ориентации устройства:
Вы можете взять управление:
- Ориентации, поддерживаемые вашим приложением
- Как вращение между двумя ориентациями анимируется на экране.
То, как я читаю это, - "Вы можете контролировать любую из этих вещей, но ничего больше" или "Вам разрешено управлять только этими двумя вещами".
Я не вижу ничего в документации, в которой явным образом расскажу вам, как "принудительно" изменить ориентацию. Все это обрабатывается устройством, так что оно кажется более естественным и удобным для человека, держащего устройство. Это имеет смысл?
См. здесь документы об изменениях вращения:
http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html
Наконец, я бы сказал, что это невозможно, и, кроме того, он не будет одобрен Apple. Я проголосовал за правдивый ответ, потому что я думаю, вам, возможно, придется рассмотреть другой подход к тому, что вы пытаетесь сделать.
Ответ 5
да, вы это сделаете. то, что вам нужно сделать, это метод (void) viewwillappear просто включает следующий код
if (self.interfaceOrientation == <current orientation>) {
[[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)<to which orientation you want to change.>];
}
он решит вашу проблему