Подтвердить что ты не робот

Есть ли способ изменить ориентацию интерфейса на iPhone?

Я знаю, как разрешить/запретить ориентацию для поворота с помощью

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Однако теперь у меня проблема, когда телефон может быть в портретном (или увеличенном), и в какой-то момент я хочу повернуть экран так, как если бы пользователь повернулся к пейзажу. На данный момент я не хочу, чтобы autorotate работал больше. Я хочу заставить ориентацию интерфейса оставаться в ландшафте. Есть ли способ сделать это? Вероятно, я могу найти взломы для отключения авторотации, но, в первую очередь, заставляя вращение, я понятия не имею, как это сделать.

Вот что я пытаюсь сделать:

  • Приложение поворачивается на любую ориентацию. Все нормально.

  • Происходит событие.

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

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

Спасибо.

4b9b3361

Ответ 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.>];
    }

он решит вашу проблему