Jak se dostat na iPhones aktuální orientaci?

hlasů
42

Existuje zvláštní způsob, jak získat orientaci iPhones? Nepotřebuju ho ve stupních nebo radiánech, chci, aby to vrátit objekt UIInterfaceOrientation. Jen jsem ji potřebují pro if-else konstrukci jako

if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) {
//Code
}  
if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft ) {
//Code
}

Díky předem!

Položena 25/03/2010 v 20:25
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
112

To je pravděpodobně to, co chcete:

UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];

Potom můžete použít systémové makra, jako je:

if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
{

}

Pokud chcete, aby použití orientace zařízení:

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

To zahrnuje výčty, jako UIDeviceOrientationFaceUpiUIDeviceOrientationFaceDown

Odpovězeno 25/03/2010 v 20:36
zdroj uživatelem

hlasů
11

Jak je uvedeno v další odpovědi, budete potřebovat interfaceOrientation, ne deviceOrientation.

Nejjednodušší způsob, jak se dostat k tomu je použít vlastnost interfaceOrientation na UIViewController. (Tedy nejčastěji právě: self.interfaceOrientation bude dělat).

Možné hodnoty jsou:

UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft

Pamatovat: Levá orientace je zapsána otočením přístroje doprava.

Odpovězeno 07/02/2012 v 21:53
zdroj uživatelem

hlasů
4

Zde je úryvek kódu I HADE psát, protože jsem dostával podivné problémy vraceli do svého kořenového pohledu, kdy byla orientace změnil .... tě vidím jen volat metodu, která by měla být s názvem ale zdají být. ... to funguje skvěle žádné chyby

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeLeft){
        //do something or rather
        [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft];
        NSLog(@"landscape left");
    }
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeRight){
        //do something or rather
        [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight];
        NSLog(@"landscape right");
    }
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationPortrait){
        //do something or rather
        [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait];
        NSLog(@"portrait");
    }
}
Odpovězeno 17/04/2012 v 00:58
zdroj uživatelem

hlasů
1

UIInterfaceOrientationje nyní zastaralé, a UIDeviceOrientationzahrnuje UIDeviceOrientationFaceUpi UIDeviceOrientationFaceDowntak nelze spoléhat na aby vám orientaci rozhraní.

Řešení je poměrně jednoduchý ačkoli

if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) {
    // Landscape
} else {
    // Portrait
}
Odpovězeno 10/12/2016 v 04:12
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more