次のメソッドを使用して、iOS 6.0 でインターフェイスの向きをサポートする方法:
shouldAutorotate
supportedInterfaceOrientations
preferredInterfaceOrientationForPresentation
「shouldAutorotateToInterfaceOrientation」は iOS 6.0 で非推奨になったため。
回答を裏付けるコード スニペットを提供してください。
ありがとう。
iOS 5 で廃止されたメソッド:
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
iOS 6 での置き換え、および上記の非推奨の iOS 5 メソッドと同等のもの:
- (BOOL) shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
お役に立てれば。
[編集 #1: iPhone 6.0 シミュレーターの XCode 4.5 でポートレート モードで正常に起動する UIViewController を追加しました]
#import "FirstViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
[#編集 2: iOS 5 および iOS 6 をサポートするランドスケープのみのアプリケーションのサンプル コード]
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
ところで、Xcode プロジェクト設定の設定が優先されるようになりました。プロジェクトの設定で「サポートされているインターフェイスの向き」配列を正しく設定していることを確認してください。それが私にとっての問題でした。望ましくないものを削除すると、アプリは Xcode 4.4.1 でコンパイルしたときと同じように機能しました
私のアプリには、カスタム UINavigationController サブクラスのインスタンスがあり、いくつかのビュー コントローラーをすべて縦向きで表示します。ただし、ビデオを再生する場合は、両方の横向きを追加で許可する必要があります。
@uerceg の回答に基づいて、これが私のコードです。
まず、Xcode -> Target -> Summary で Portrait、Landscape Left、Landscape right を有効にしました。
UINavigationController サブクラスの実装では#import
、 <MediaPlayer/MediaPlayer.h>
.
次に、これらのメソッドを実装しました。
// Autorotation (iOS <= 5.x)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) {
// Playing Video: Anything but 'Portrait (Upside down)' is OK
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
else{
// NOT Playing Video: Only 'Portrait' is OK
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
}
// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) {
// Playing Video, additionally allow both landscape orientations:
orientations |= UIInterfaceOrientationMaskLandscapeLeft;
orientations |= UIInterfaceOrientationMaskLandscapeRight;
}
return orientations;
}
NicolasMiariのコードは私のために働いた。少し異なるスピンで、UINavigationControllersを表示するUITabBarControllerがあり、StoryBoardsを使用していました。UITabBarControllerのサブクラスの実装はまったく同じであり、ストーリーボードのタブバーコントローラーのクラス選択に我慢してください。構築後もすぐには利用できません。
https://devforums.apple.com/thread/165384?tstart=0
https://devforums.apple.com/thread/166544?tstart=0
上記のスレッドには、iOS6 でのインターフェイスの向きの変更のサポートに関連する多くの例と提案があります。2 つのスレッドは、ゲーム センター ビューの問題に関連していますが、始めるには十分なはずです。
また、UIKit の下にある iOS6 のリリース ノートも確認してください。残念ながら、初心者なので直接リンクを提供することはできません。
NDA のため、ここにコードを投稿することは避けてください
それが役立つことを願っています