20

使ってます

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

向きのタイプに基づいてビューのフレームを変更するように委任します

すなわち、

if(UIInterfaceOrientationIsLandscape(interfaceOrientation))
{
    self.view.frame=CGRectMake(0,0,500,300);
}
else
{
    self.view.frame=CGRectMake(0,0,300,400);
}

iOS6で同じ状況を処理する方法

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

iOS6では非推奨になりました。

次のデリゲートを使用して、すべての方向を設定しています。

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationAllMask;
}

だが、

-(BOOL)shouldAutoRotate
{
    return YES;

}

呼び出されていません。この状況に対処する方法は?

ここに画像の説明を入力してください

4

7 に答える 7

46

AppDelegateで、ViewControllerオブジェクトを次のようにウィンドウに追加しました。

[self.window addSubView:viewControllerObj]

問題は上記の行にありました。オリエンテーションはiOS5では上記の行で正しく機能しますが、iOSでは、オリエンテーションが正しく機能するように、上記の行を次のように変更します

[self.window setRootViewController:viewControllerObj]

次に、向きが変わるとアプリが回転します。

于 2012-09-21T10:55:06.477 に答える
3

プロジェクトとターゲットの設定で、各デバイスタイプの向きが許可されていることを確認してください。

また、あなたが持っているコードはshouldAutorotateToInterfaceOrientation:あなたが入れることができますviewDidLayoutSubviews

于 2012-09-20T19:39:17.467 に答える
1

iOS 6では、ローテーションの処理は親のビューで注意を払うことを忘れないでください。子のビューコントローラに対する責任が少なくなります。しかし、InterfaceBuilderなしですべてをコーディングすることは私たちにとってもっと厄介です。

于 2012-09-21T10:17:37.923 に答える
0

オリエンテーションがすべて有効になっていることを確認してください。ここに画像の説明を入力してください

于 2012-09-22T11:49:06.030 に答える
0

iOS6でのUINavigationの向きの問題の処理

1 UINavigation+Rotationカテゴリクラスを作成します

2 UINavigation+Rotation.mクラスのメソッドの下に配置

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject]supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    if ([self.viewControllers count] == 0) {
        return UIInterfaceOrientationPortrait;
    }
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
于 2013-03-21T13:04:20.273 に答える
0

この方法は、IOS6以前のバージョンで正常に機能します

-(BOOL)rotationChanged:(UIInterfaceOrientation)interfaceOrientation {
    NSIntegerオリエンテーション=[[UIDevicecurrentDevice]オリエンテーション];
    UIWindow * _window =[[[UIApplicationsharedApplication]デリゲート]window];
    if([PGPlatformUtils GetCurrentPlatform] == PGPlatformEnum_iPhone){
        スイッチ(向き){
            ケース1:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(0)];
                [_window setFrame:CGRectMake(0、0、320、480)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitアニメーション:YES];

                [UIView commitAnimations];
                壊す;
            ケース2:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(M_PI)];
                [_window setFrame:CGRectMake(0、0、320、480)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitアニメーション:YES];

                [UIView commitAnimations];
                壊す;
            ケース3:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
                [_window setFrame:CGRectMake(0、0、320、480)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRightアニメーション:YES];

                [UIView commitAnimations];
                壊す;
            ケース4:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];
                [_window setFrame:CGRectMake(0、0、320、480)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeftアニメーション:YES];

                [UIView commitAnimations];
                壊す;
            ケース5:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(0)];
                [_window setFrame:CGRectMake(0、0、320、480)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIPrintInfoOrientationLandscapeアニメーション:YES];

                [UIView commitAnimations];
                壊す;


            デフォルト:
                壊す;
        }
    }
    そうしないと{
        スイッチ(向き){
            ケース1:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(0)];
                [_window setFrame:CGRectMake(0、0、768、1024)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitアニメーション:YES];
                NSLog(@ "*** 1 Orientation Call 0");

                [UIView commitAnimations];
                壊す;
            ケース2:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(M_PI)];
                [_window setFrame:CGRectMake(0、0、768、1024)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDownアニメーション:YES];
                NSLog(@ "*** 1オリエンテーションコールM_PI");
                [UIView commitAnimations];
                壊す;
            ケース3:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
                [_window setFrame:CGRectMake(0、0、768、1024)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRightアニメーション:YES];
                NSLog(@ "*** 1 Orientation Call M_PI / 2");
                [UIView commitAnimations];
                壊す;
            ケース4:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(-M_PI / 2)];
                [_window setFrame:CGRectMake(0、0、768、1024)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeftアニメーション:YES];
                NSLog(@"***1オリエンテーションコール-M_PI/2");
                [UIView commitAnimations];
                壊す;
            ケース5:
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.0];

                [_window setTransform:CGAffineTransformMakeRotation(0)];
                [_window setFrame:CGRectMake(0、0、768、1024)];
                [[UIApplication sharedApplication] setStatusBarOrientation:UIPrintInfoOrientationLandscapeアニメーション:YES];
                NSLog(@ "*** 1 Orientation Call 0");
                [UIView commitAnimations];
                壊す;

            デフォルト:
                壊す;
        }
    }
    YESを返します。

}
于 2013-06-07T08:37:41.807 に答える
0

willAnimateRotationToInterfaceOrientationiOS6で使用します。

于 2013-07-05T07:49:47.580 に答える