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

Существует ли возможный способ автоматической ориентации устройства в портретной ориентации, когда текущая ориентация устройства направлена ​​вверх или вниз?

5 ответов

Вы можете использовать этот трюк, чтобы система обновляла ориентацию вашего контроллера в любое время:

[self presentViewController:[UIViewController new] animated:NO completion:NULL];
[self dismissViewControllerAnimated:NO completion:NULL];

Это позвонит supportedInterfaceOrientations на вашем контроллере.

Просто вернись UIInterfaceOrientationMaskPortrait когда ориентация устройства направлена ​​вверх или вниз, и вид вашего контроллера будет соответствующим образом скорректирован.


соблюдать UIDeviceOrientationDidChangeNotifications использовать хитрость, когда вы получаете уведомление, и это ориентация устройства вверх / вниз, так как эти ориентации не соответствуют UIInterfaceOrientations (и не сработает supportedInterfaceOrientations).

Определения ориентации устройства и интерфейса:

typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
};

typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
    UIDeviceOrientationUnknown,
    UIDeviceOrientationPortrait,            // Device oriented vertically, home button on the bottom
    UIDeviceOrientationPortraitUpsideDown,  // Device oriented vertically, home button on the top
    UIDeviceOrientationLandscapeLeft,       // Device oriented horizontally, home button on the right
    UIDeviceOrientationLandscapeRight,      // Device oriented horizontally, home button on the left
    UIDeviceOrientationFaceUp,              // Device oriented flat, face up
    UIDeviceOrientationFaceDown             // Device oriented flat, face down
};

Используйте этот код в вашем - (void) метод viewWillApper

if(self.interfaceOrientation==UIInterfaceOrientationPortrait||self.interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown)
{
 //do something;
}
else
{
}

Вы можете отключить или включить вращение экрана в портретном режиме, установив соответствующее значение в настройках проекта (Цели -> Общие -> Раздел Информация о развертывании).

  • установите флажок Портрет
  • установите флажок " Вверх" (это включает анимацию "Вверх")

или же

  • установите флажок Портрет
  • снимите флажок Upside Down (это только режим Upside Down)

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

Использовать self.view.window?.windowScene?.interfaceOrientation.

Это значение будет либо portrait, portraitUpsideDown, landscapeRight, или же landscapeLeft.

См. здесь документацию.

Другие вопросы по тегам