Как изменить ориентацию устройства на портретную, когда текущая ориентация направлена вверх или вниз
Существует ли возможный способ автоматической ориентации устройства в портретной ориентации, когда текущая ориентация устройства направлена вверх или вниз?
5 ответов
Вы можете использовать этот трюк, чтобы система обновляла ориентацию вашего контроллера в любое время:
[self presentViewController:[UIViewController new] animated:NO completion:NULL];
[self dismissViewControllerAnimated:NO completion:NULL];
Это позвонит supportedInterfaceOrientations
на вашем контроллере.
Просто вернись UIInterfaceOrientationMaskPortrait
когда ориентация устройства направлена вверх или вниз, и вид вашего контроллера будет соответствующим образом скорректирован.
соблюдать UIDeviceOrientationDidChangeNotification
s использовать хитрость, когда вы получаете уведомление, и это ориентация устройства вверх / вниз, так как эти ориентации не соответствуют UIInterfaceOrientation
s (и не сработает 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
.
См. здесь документацию.