在应用启动时检测正确的方向

时间:2012-07-23 22:52:35

标签: ios ios5

我有一个带有splitcontroller的通用应用程序和一个模式,它从detailcontroller的viewdidload(它的登录屏幕)显示模态

打开ipad版本时,我希望能够根据设备的初始方向在纵向或横向上启动它。问题是它总是作为肖像发布(预期根据documentation)。

如果我将设备设为肖像,然后转动横向,则可以正常工作。但是,如果我直接打开应用程序,它就不会。

顺便说一句:我已经在{login}控制器的return true设置了(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

更新 如果我从viewDidAppear而不是viewDidLoad执行segue,模态的方向可以正常工作,但是在模态之前看到SplitController一段时间,我该如何避免这种情况?

- (void)viewDidAppear:(BOOL)animated
{
    [self.splitViewController performSegueWithIdentifier:@"toModal" sender:self.splitViewController];
}

1 个答案:

答案 0 :(得分:1)

您可以有条件地设置(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation的方向。像这样的东西并不漂亮,但它有效:

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

if(orientation == 0) //Default orientation 
    //UI is in Default (Portrait) -- this is really a just a failsafe. 
else if(orientation == UIInterfaceOrientationPortrait)
    //Do something if the orientation is in Portrait
else if(orientation == UIInterfaceOrientationLandscapeLeft)
    // Do something if Left
else if(orientation == UIInterfaceOrientationLandscapeRight)
    //Do something if right

否则这篇文章似乎与你想要做的事情相关:

Launching application in landscape orientation for IPad


提案2


您可以使用以下方法创建一个具有查找设备方向(即“deviceInfo”)的方法的类:

UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication]statusBarOrientation])

UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication]statusBarOrientation])

您还可以存储您需要的任何拉伸系数/尺寸/尺寸。然后在view -(id)initWithFrame:(CGRect)frame中,您可以调用方法来检查方向(即deviceInfo.isLandscape?)。然后设置view的{​​{1}}等于autoresizingMask。然后,在UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth中设置-(void)layoutSubviews等于您想要的任何尺寸:

view.frame

以下是获取当前方向的参考:

http://www.ddeville.me/2011/01/getting-the-interface-orientation-in-ios/

更改视图框的尺寸相对简单,可以在Apple的文档或一些简单的Google搜索中找到。