开发者

iphone always returns UIInterfaceOrientationPortrait

开发者 https://www.devze.com 2023-03-02 22:47 出处:网络
I need to make sure that when my UIViewController loads, it rotates as needed. I have implemented the shouldAutorotateToInterfaceOrientation methods and its all working fine, except when the app firs

I need to make sure that when my UIViewController loads, it rotates as needed.

I have implemented the shouldAutorotateToInterfaceOrientation methods and its all working fine, except when the app first loads (when the iphone is in landscape mode) or when going from a UIViewController which was is portrait mode the interfaceOrientation and the [[UIDevice currentDevice] orientation] always returns portrait mode!

I have been reading blogs and even some SO questions, but none of them seem to address the underlying issue.

I am using a standard UINavigationController application. So the first view is the first pushed controller onto the stack. I have also tried asking the self.navigationController its orientation, with no luck either.

Any help here is greatly appreciated.

EDIT: Here is my code for the viewWillAppear

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:YES animated:NO];

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
    [self setPortraitMode];
else
    [self setLandscapeMode];
}

EDIT 2

Here is how I am printing out the current

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
NSLog(@"currentDevice: %d", (int)orientation);
NSLog(@"statusbar: %d", (int)[UIApplication sharedApplication].statusBarOrientation);
NSLog(@"nav controller: %d", (int)self.navi开发者_运维百科gationController.interfaceOrientation);
NSLog(@"interface orientation: %d", (int)self.interfaceOrientation);

They all print out "1"

but when I put this code in the willRotateToInterfaceOrientation method, then they print out the correct int values (1,2,3 or 4).


Instead of using [[UIDevice currentDevice] orientation] for checking orientation use statusbar orientation to get the exact orientation :- [UIApplication sharedApplication].statusBarOrientation . I also had problem while checking currentDevice orientation , it does not always return the exact orientation


iPhone apps are always launched in portrait orientation, because the home screen is portrait-only. Likewise, the launch image is intended to be displayed in portrait orientation. The only exception is if the app is landscape-only.

(iPad apps can be launched in any screen orientation, and and you must provide separate launch images for both orientations.)


What about checking the orientation in viewDidAppear: instead? You can use the 'animated' to decide if you will rotate with animation or not. You view may appear and then rotate, but I think that would an acceptable experience.

EDIT: as a follow up to my comments, here's the screen shot from Xcode 4 for UIInterfaceOrientation:

iphone always returns UIInterfaceOrientationPortrait


I was working with the rotations and orientations of the iOS App. I found that self.interfaceOrientation will always give you a correct result if called in viewDidAppear or after that.

[UIApplication sharedApplication].statusBarOrientation should be preferred when adding a view directly to UIWindow.

Hope it helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消