質問

私はこれが多くの人々を悩まれている何かであることがわかります:/

私は4 viewControllers、タイプUINavigationControllerのすべてを持っているUITabBarControllerを持っています。 取得のViewControllerは、そのスタックにプッシュnavigationControllersの一つは、こののViewControllerは、ランドスケープモード/向きで提示する必要があります。

のViewControllerは、それは風景が理にかなっているアプリでは絶対唯一の場所である、グラフです。 (これはこれはどこでも動作します信じるようにユーザーを導くないようにするために提示されたときに、私はUITabBarを隠す)

すべてのviewControllersは、デリゲートメソッドから同じ値を返す必要が向きの変化に正しくUITabBarControllerの応答を作成するには:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

だから、私はUITabBarControllerに属するすべてのviewControllersでこのメソッドを実装しているこの動作を収容します

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    BOOL canRotate = [defaults boolForKey:@"can_rotate"];

    return canRotate;
}

は「トリック」は私の缶被風景のViewControllerが押されたとき、私はこれを行うことになりました

- (void) viewWillAppear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"can_rotate"];
    [defaults synchronize];

}

とそれがポップされたとき、私は次の操作を行います。

- (void) viewWillDisappear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey:@"can_rotate"];
    [defaults synchronize];

}

これは本当によく働きます。 ViewControllerがスタックにあるとき、私は、デバイス及びビューを回転させることができ、次の

問題は、ランドスケープモードにある間、ユーザは、このように、前のViewControllerにViewControllerを飛び出る、navigationBarの「戻る」ボタンをタップすると、この「古い」のViewControllerは、ランドスケープモードでも、もちろんであることがあります。私はNOにBOOLを設定しているため、さらに悪いことに、この「古い」のViewControllerは、私はポートレートモードにデバイスを回転させない背中を向けることができるときます。

私は缶-こと・イン・ランドスケープモードのViewControllerをポップするとき、私の他のviewControllersのいずれもが、ランドスケープモードにできなくなりますので、更新のすべてに方法はありますか?

私は少しはこれが横向きから縦向きに行うことができれば、それはまた、このように私の不要な「ハック」すること、肖像画から風景に可能であることを心配しています..しかし、それができないならば、私は振り出しに戻っています:/

、希望私は近いですし、誰かが私がそこに得るのを助けることができ感謝:)

役に立ちましたか?

解決

私は全体を簡素化することができると思います....

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
return NO;
}

-(void) viewDidAppear:(BOOL)animated { [UIView beginAnimations:@"View Flip" context:nil]; [UIView setAnimationDuration:0.5f]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(90.0*0.0174532925);
    self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
    self.view.center = CGPointMake(160.0f, 240.0f);

// [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;

[UIView commitAnimations];
[super viewDidAppear:animated];

}

何も自動回転していますが、その後、手動で移動したいビューを回転させます。ビューでのキーボードのサポートを必要としない場合は、statusBarOrientationを変更する必要はありません。

あなたは常にそのビューでは、少し難しい問題があり、その後回転させたくない場合 - あなたは携帯電話のラウンド方法がある(または、どの方法電話を暗示することは可能であるかもしれない把握する加速度計の値をチェックしたい場合がありますshouldAutotateToInterfaceOrientationへの呼び出しによって回転して、同じように変換コードを呼び出すとされてきたあなたがする必要があるときます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top