このスタックオーバーフローの投稿を見ました: shouldAutorotateToInterfaceOrientation is not working in iOS 6。その答えは、RotationIn_IOS6 というカテゴリを追加することでした。私はそれを行い、さまざまなビューコントローラーのビューが iOS6 で正しく機能しています。問題は iOS5 にあります。
すべての方向に回転するために必要なビューはいくつかだけで、残りは縦向きまたは PortraitUpsideDown にする必要があります。私が直面している問題は、すべてが回転しない(code1)か、横向きに回転した後、縦向きに戻るまで同じ向きのままである(code2)ことです。
コード 1:
@implementation UINavigationController (RotationIn_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
@end
コード 2:
@implementation UINavigationController (RotationIn_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if([self.visibleViewController isKindOfClass:[MyClassToRotate class]])
{
return [self.visibleViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
else
{
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
}
これに関するガイダンスが必要です。これを解決する方法がわかりません。
編集:
コード 3:
1) カテゴリから shouldAutorotateToInterfaceOrientation を削除しました。2)このコードを特定のクラスに追加しました
- (BOOL)shouldAutorotate
{
//returns true if want to allow orientation change
return TRUE;
}
- (NSUInteger)supportedInterfaceOrientations
{
//decide number of origination tob supported by Viewcontroller.
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
//from here you Should try to Preferred orientation for ViewController
return TRUE;
}
結果 -> すべてのビューコントローラーが縦向きにロックされます。PortraitUpsideDown にアクセスできません。ビューコントローラーに入ると、回転できますが、ビューコントローラーから出ると、横向きにロックされます..
編集2:
各ビューコントローラーには次のコードが含まれています。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutorotate {
return NO;
}