iPhoneの向きが変わったときにUITabBarの場所を切り替えて正常に動作しますが、電話の位置に関係なく、最初のタブのビュー内のコントロールを静的に保ちたいです。明らかな何かが欠けているような気がしますか?
編集: 基本的に、コントロールは常に横向きですが、タブ バーは向きを切り替える必要があります。これは可能ですか?
iPhoneの向きが変わったときにUITabBarの場所を切り替えて正常に動作しますが、電話の位置に関係なく、最初のタブのビュー内のコントロールを静的に保ちたいです。明らかな何かが欠けているような気がしますか?
編集: 基本的に、コントロールは常に横向きですが、タブ バーは向きを切り替える必要があります。これは可能ですか?
コントロールを再調整したくないビューでは、自動サイズ変更を無効にします[self.view setAutoresizesSubviews:NO];
。これにより、すべてのコントロール (サブビュー) がインターフェイスの向きの変更に応答しなくなりますが、タブは引き続き応答します。現在のビューの autoresizingMask を設定する必要がある場合もあります。[self.view setAutoresizingMask:UIViewAutoresizingNone];
追加:回転させたくないすべてのコントロールに対して次のことを試してください
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
switch (toInterfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft:
label.transform = CGAffineTransformMakeRotation(M_PI_2); // 90 degress
break;
case UIInterfaceOrientationLandscapeRight:
label.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2); // 270 degrees
break;
case UIInterfaceOrientationPortraitUpsideDown:
label.transform = CGAffineTransformMakeRotation(M_PI); // 180 degrees
break;
default:
label.transform = CGAffineTransformMakeRotation(0.0);
break;
}
}
風景の例
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
また
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscape);
}
残念ながら、それは正確には簡単ではありません。コンテンツ ビュー コントローラーを応答させずに、UITabBarController をインターフェイスの変更に応答させることはできません。
しかし、それを行う方法があります。コンテンツ ビュー コントローラーのでは、回転させたくないサブビューにwillAnimateRotationToInterfaceOrientation:duration:
( プロパティを使用して) 反対の回転を適用できます。transform
たとえば、UIInterfaceOrientationLandscapeLeft は時計回りに 90° の回転であるため、ビューに反時計回りに 90° の回転を適用すると、回転してtransform
いないように見えます。
必要に応じて、コンテンツ ビュー コントローラーのインターフェイス全体を UIView に含めることができるため、その 1 つのビューを逆回転 (およびサイズ変更) するだけで済みます。ビュー コントローラーのメイン ビューに逆回転を適用することが機能するかどうかはわかりません。システムがその特定のビューの設定をオーバーライドする可能性があります。