25

でのみ動作するアプリPortrait Modeがありますが、ビデオを表示できる singleView があるので、そのビューも で動作するようにしたいのですlandscape modeが、iOS 6 ではどうすればそれができるのかわかりません。

AppDelegate.mi には次のものがあります。

self.window.rootViewController = myTabBar;

次に、プロジェクトの概要で:

ここに画像の説明を入力

そして、iOS 6でビューの回転を検出するには、これを行う必要があることがわかりました:

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}

// Tell the system It should autorotate
- (BOOL) shouldAutorotate {
return YES;
}

だから私はランドスケープでも使用したい私のものだけに上記のコードを挿入しますUIViewControllerが、うまくいきません。ビデオを表示するときに自動回転したいだけです。

4

3 に答える 3

49

まず、ターゲット設定は次のようになります。 サポートされているインターフェイスの向き

UITabBarController で:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // You do not need this method if you are not supporting earlier iOS Versions
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

-(NSUInteger)supportedInterfaceOrientations
{
    if (self.selectedViewController) 
        return [self.selectedViewController supportedInterfaceOrientations];

    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

ViewController 内:

a) 回転させたくない場合:

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

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

b) 横向きに回転させたい場合:

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

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

編集:

他の解決策は、AppDelegate 内にこのメソッドを実装することです。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    NSUInteger orientations = UIInterfaceOrientationMaskAll;

    if (self.window.rootViewController) {
        UIViewController* presented = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
        orientations = [presented supportedInterfaceOrientations];
    }
    return orientations; 
}
于 2012-09-23T10:57:38.573 に答える
3

コメントを書きますが、できないので、これを回答として投稿します。

これは私のシナリオでした:

私のアプリは特定のビューでのみ方向の変更をサポートしていますが、必要なビューだけでそれを行う方法がわかりませんでした。その後、この質問にたどり着き、mientus の回答 (ありがとう) を見て、先に進んで何をしましたか彼は、どれが UITabBarController のサブクラスであり、これらのメソッドをオーバーライドすることを提案しました:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

    NSLog(@"AUTO ROTATE IN CUSTOM TAB BAR");
    // You do not need this method if you are not supporting earlier iOS Versions
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}


-(NSUInteger)supportedInterfaceOrientations{

    NSLog(@"supportedInterfaceOrientations IN CUSTOM TAB BAR");

    if (self.selectedViewController)
        return [self.selectedViewController supportedInterfaceOrientations];

    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate{

    NSLog(@"shouldAutorotate IN CUSTOM TAB BAR");
    return [self.selectedViewController shouldAutorotate];
}

次に、各View Controller内に、回転が必要かどうかを示すメソッドがあります。UITabBarController のメソッドは呼び出されていましたが、viewcontroller のメソッドは呼び出されていなかったため、不要な場所で回転が発生していました。次に、UINavigationController をサブクラス化し、このように見えるように supportedInterfaceOrientation のこの変更のみで同じメソッドをオーバーライドします。

- (NSUInteger)supportedInterfaceOrientations{

NSLog(@"supportedInterfaceOrientations IN CUSTOM NAV BAR CALLING CURRENT VIEW CONTROLLER");
UIViewController* presented = [[self viewControllers] lastObject];
return [presented supportedInterfaceOrientations];

}

これが基本的に行うことは、現在のView Controllerを取得してから、サポートされている方向を要求し、ViewControllerのメソッドが呼び出されて、必要な方向を処理できることです。

于 2013-02-06T20:29:10.173 に答える
0

回転させたいビューは、縦向き専用ビューのサブビューですか? 通常、ビューの回転動作は rootviewcontroller から継承されます。次に、rootviewcontroller の shouldAutorotate で NO を返すと、すべてのアンダービューで回転が停止します。

このようにアーキテクチャを分割することをお勧めします。

rootViewController -> supportedInterfaceOrientations = Portrait & shouldAutorotate = YES NORotationViewControllers -> supportedInterfaceOrientations = Portrait & shouldAutorotate = YES rotationViewControllers -> supportedInterfaceOrientations = All & shouldAutorotate = YES

これをまだ読んでいない場合は、以下をご覧ください: 複数のインターフェイス方向のサポート

于 2012-09-23T10:48:35.900 に答える