0

多くの状況でコントローラーを回転させる必要があり、機能していません。現在、問題の逆があります。回転していて、無効にしたいのです。

そのViewControllerには次のものがあります:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

ただし、この UIViewController が要求されるのではなく、UI ツリー内の親が要求されるため、自動回転です。多分それが問題です。ルート コントローラーは、すべてのケースで Yes を返す必要があります。これは、Portait/Landscape をサポートしている/持っている必要があるスタック上にいくつかの他の UIViewControllers があるためです。

他の部分に触れられない/触れたくない理由は...いくつかの理由があります。たとえば、アプリが巨大で、多くの既知のバグがあり、1つを作成して1つテストしたくありません週、その他は締め切りです。

このようなものであってはならず、書き直さなければならないなどと提案しないでください。知っている。

Portait を強制するためにこのコントローラーを処理するにはどうすればよいですか?

太字のテキストもお読みください。アプリ全体で 1 つのビュー コントローラーに対して Portait のみをサポートするように強制することはできません。多数のビュー コントローラーがスタックに存在します。

4

2 に答える 2

2

プロパティ ファイルで、アプリのサポートされているインターフェイスの向きを縦向きのみに設定してみてください。ただし、もちろん、その関数では、回転を許可するビュー コントローラーで YES を返すだけです。ただし、スタックに戻すと、他のビューは縦向きになります。

縦向きのみの向き

于 2012-09-05T18:03:20.053 に答える
1

横方向の回転を検出し、縦方向に回転します。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{ 

    UIInterfaceOrientation appOrientation = [UIApplication sharedApplication].statusBarOrientation;
    float width = self.view.bounds.size.width;
    float height = self.view.bounds.size.height;
    //NSLog(@"width %3.0f, height: %3.0f", width, height);

    if((fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)){
        // if is rotated from Portait:
        if((appOrientation == UIInterfaceOrientationLandscapeLeft || appOrientation == UIInterfaceOrientationLandscapeRight)){
            // to Landscape:
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
            self.view.transform = transform;            

            [self.view setBounds:CGRectMake(0, 0, height, width)];
        }
    }
    else {
        // it is rotated from Landscape:
        if((appOrientation == UIInterfaceOrientationPortrait || appOrientation == UIInterfaceOrientationPortraitUpsideDown)){
            // to Portrait:            
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, +(M_PI / 2.0));
            self.view.transform = transform;            

            [self.view setBounds:CGRectMake(0, 0, height, width)];
        }
    } 
}

これは最適なプログラミング パラダイムではありませんが、うまく機能します。

誰かが彼の答えを受け入れるために、このように似たようなものを書くか、可能であればより良い方法を書いてください!

于 2012-09-07T13:03:25.877 に答える