UIDevice Orientamento
-
23-10-2019 - |
Domanda
Come scoprire se l'UIDeviceOrientationFaceUp è il paesaggio a faccia in su o ritratto a faccia?
Uno può dirmi?
Soluzione
Non è possibile, perché l'accelerometro non rileva la rotazione intorno all'asse z. Su un iPhone 4, si potrebbe forse usare il giroscopio per questo (utilizzando CoreMotion), ma UIDevice
non dispone di un'API per questo. Si potrebbe quindi avere anche per definire ciò che la posizione di partenza è, perché non è possibile rilevare in quale direzione l'utente è dal punto di vista del dispositivo.
Altri suggerimenti
UIDeviceOrientation
solo vi dirà l'orientamento del dispositivo fisico. È necessario utilizzare i metodi che uso UIInterfaceOrientation
(da UIApplication
) per prendere decisioni a seconda che lo schermo è in modalità verticale e orizzontale.
È possibile utilizzare UIInterfaceOrientationIsLandscape()
e UIInterfaceOrientationIsPortrait()
con un UIInterfaceOrientation
troppo.
Mi rendo conto che questa è una vecchia questione ora, ma guardando le risposte tutti è essere eccessivamente pedante. Nel caso qualcuno inciampa altro in questo:
La risposta al vostro problema è per voi per mantenere una variabile secondaria che è uno dei tuoi orientamenti accettati.
Quando la notifica orientamento del dispositivo entra, è sufficiente guardare l'orientamento in entrata e vedere se un una accettabili, (ritratto / paesaggio non faccia in su / a faccia in giù) quindi aggiornare la variabile secondaria, e, infine, attivare un aggiornamento ui / app da lì utilizzando la variabile secondaria come fonte di orientamento.
Ciò avrà l'effetto di bloccare l'orientamento all'orientamento "Ultima".
UIDeviceOrientationFaceUp e UIDeviceOrientationFaceDown sono orientamenti per quando il dispositivo si posa piatta (come su un tavolo). Ritratto e Paesaggio non hanno senso in questi casi.
Non c'è modo si può scoprire da orientamento. Ho trovato una soluzione.
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
}