Ориентация UIDEVICE
-
23-10-2019 - |
Вопрос
Как выяснить, является ли UideviceoratationFaceup Landscape Face Up или Portrait Face Up?
Кто -нибудь может сказать мне?
Решение
Это невозможно, потому что акселерометр не может обнаружить вращение вокруг оси Z. На iPhone 4 вы могли бы использовать гироскоп для этого (с использованием coremotion), но UIDevice
нет API для этого. Затем вам также придется определить, что такое исходная позиция, потому что вы не можете обнаружить, в каком направлении пользователь находится с точки зрения устройства.
Другие советы
UIDeviceOrientation
Расскажет только ориентацию физического устройства. Вам нужно использовать методы, которые используют UIInterfaceOrientation
(из UIApplication
) принимать решения в зависимости от того, находится ли экран в режиме портрета и ландшафта.
Вы можете использовать UIInterfaceOrientationIsLandscape()
а также UIInterfaceOrientationIsPortrait()
с UIInterfaceOrientation
слишком.
Я понимаю, что сейчас это старый вопрос, но, глядя на ответы, которые все являются чрезмерно педантичными. В случае, если кто -то еще наткнутся на это:
Ответ на вашу проблему состоит в том, чтобы вы сохранили вторичную переменную, которая является любой из ваших принятых ориентаций.
Когда приходит уведомление о ориентации устройства, просто посмотрите на входящую ориентацию и посмотрите, является ли оно приемлемым (портрет/ландшафт, а не лицом к лицу/Facedown), затем обновите вторичную переменную и, наконец, запустите обновление пользовательского интерфейса/приложения, используя второстепенный переменная в качестве источника ориентации.
Это будет иметь эффект блокировки ориентации на «последнюю известную хорошую» ориентацию.
Uideviceoratationfaceup и uideviceoratationfacefown - это ориентации, когда устройство лежит плоско (например, на таблице). Портрет и ландшафт не имеют смысла в этих случаях.
Вы никак не можете узнать по ориентации. Я нашел обходной путь.
CGRect screenBounds = [[UIScreen mainScreen]bounds];
if(screenBounds.size.width > screenBounds.size.height)
{
// This means FaceUP/Down is in Landscape
}
else
{
// This means FaceUp/Down is in Portrait
}