1

ほとんどの場合、向きは私のアプリで正しく機能していますが、iPad 1でのテストで問題が発生しています。デバイスを比較的低い角度で傾けている場合、タブをナビゲートしているときにタブがバーは横向きモードで表示されますが、ページは縦向きモードのuiviewを呼び出してから、横向きモードでレンダリングしようとし、UIを台無しにします。

「タブバーが横向きモードで表示される場合は常に横向きUIViewを呼び出し、縦向きモードの場合は常に縦向きUIViewを呼び出す」というロックダウン方法があるかどうかを調べようとしています。

各ViewControllerで、次のように設定しました。

- (void)viewDidLoad
{
[super viewDidLoad];

// iPad-specific condition here
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)){
        self.view = self.portraitViewiPad;
    }
    else {
        self.view = self.landscapeViewiPad;
    }
}
}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

// iPad-specific condition here
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {

        //show portrait XIB here
        self.view = self.portraitViewiPad;

    } else {

        //show landscape XIB here
        self.view = self.landscapeViewiPad;

    }
}
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
    // iPad-specific interface here
    return YES;
}
else
{
    // For iPhone and iPod touch interface
    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}
}

また、問題に対処できると考えて、以下の方法を使用してアプリデリゲートを調整しました。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
//CALLS RELOAD METHODS HERE AND EACH UIVIEW IS PROPERLY BEING CALLED
}

アップデート:

ステータスバーの向きを確認し、それに応じて正しいuiviewを表示することで、この問題を修正しました。viewDidLoadメソッドを更新した方法は次のとおりです。

if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationLandscapeLeft){

    NSLog(@"Left landscape detected");

    self.view = self.landscapeViewiPad;


} else if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationLandscapeRight){

    NSLog(@"Right landscape detected");

    self.view = self.landscapeViewiPad;

} else if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortrait){

    NSLog(@"Portrait orientation detected");

    self.view = self.portraitViewiPad;

} else if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortraitUpsideDown){

    NSLog(@"Upsidedown Portrait detected");

    self.view = self.portraitViewiPad;

}
4

1 に答える 1

2

[[UIDevicecurrentDevice]方向]をテストしたくないと思います。ドキュメントに記載されているように、値はアプリのUIの実際の向きとは異なる場合があります。[UIViewControllershouldRotateTo...]と[UIViewControllerwillRotateTo...]の呼び出しに依存することをお勧めします。

于 2012-05-14T15:48:08.330 に答える