12

これまですべての質問を見てきましたが、実際にこの質問に答えているものはないようです。

UITabBarController を作成し、いくつかのビュー コントローラーを追加しました。ほとんどのビューは縦向きで表示されますが、横向きで表示する必要があります。加速度計を使用したり、ユーザーがデバイスを回転させたときに検出したりしたくありません。下部のタブからビューを選択したときにビューを横向きモードで表示したいだけです。

その項目を選択すると、タブがドロップアウトする、ビューが回転するなどの通常のアニメーションが発生し、別のビューを選択すると逆のアニメーションが発生するようにします。

ビューを表示する向きをシステムに伝える組み込みのプロパティまたはメソッドはありませんか?

shouldautorotate... メソッドをオーバーライドしても、私が知る限り、まったく何もしません。

私が感謝しないタイプの答えは「RTFM」です。なぜなら、私はすでに持っていて、これまでiPhone用に開発した人なら誰でも、MからF-ingへの有用な機能がほとんどないことを知っているからです。

4

4 に答える 4

9

これを行うために私がやっていることは次のとおりです。

まず、この定義をファイルの先頭、#imports のすぐ下に置きます。

#define degreesToRadian(x) (M_PI * (x) / 180.0)

次に、viewWillAppear: メソッドで

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}

それをアニメーション化したい場合は、次のように、全体をアニメーション ブロックでラップできます。

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];
于 2009-01-21T04:02:52.250 に答える
9

役に立つかもしれないフォーラムへの投稿。簡単な答えは、viewWillAppear: メソッドで、ビューが描画されたら手動でビューまたはコントローラーを回転させる必要があるということです。

CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

[[appDelegate navController].view setTransform:landscapeTransform];
于 2008-12-10T17:34:17.593 に答える
0

shouldAutorotateToInterfaceOrientationは、タブバーコントローラーのすべてのビューまたはナビゲーションコントローラーのすべてのビューコントローラーが回転に同意した場合にのみ機能します。

于 2012-04-20T15:28:42.450 に答える
0

コントローラー クラスの Orientation メソッドをオーバーライドし、次のように強制的にランドスケープにします。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    // Overriden to allow any orientation.
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

シンプルで効率的!

于 2012-01-13T21:06:20.513 に答える