私は使っている
- (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;
}
呼び出されていません。この状況に対処する方法は?
AppDelegateで、ViewControllerオブジェクトを次のようにウィンドウに追加しました。
[self.window addSubView:viewControllerObj]
問題は上記の行にありました。オリエンテーションはiOS5では上記の行で正しく機能しますが、iOSでは、オリエンテーションが正しく機能するようにするには、上記の行を次のように変更します。
[self.window setRootViewController:viewControllerObj]
次に、向きが変わるとアプリが回転します。
プロジェクトとターゲットの設定で、各デバイスタイプの向きが許可されていることを確認してください。
また、shouldAutorotateToInterfaceOrientation:
にあるコードはviewDidLayoutSubviews
に入れることができます。
IOS 6では、ローテーションの処理は親のビューで注意を払うことを忘れないでください。子のビューコントローラに対する責任が少なくなります。しかし、InterfaceBuilderなしですべてをコーディングすることは私たちにとってもっと厄介です。
オリエンテーションがすべて有効になっていることを確認してください。
IOS6ではwillAnimateRotationToInterfaceOrientation
を使用します。
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];
}