-1

私のビュー コントローラーでは、インターフェイスの向きを制御するための 2 つのメソッドを実装しています。

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

supportedInterfaceOrientationsメソッドで、私は戻りUIInterfaceOrientationMaskPortraitますが、その時、メソッドが呼び出されていないことに気付きましたshouldAutorotate

return UIInterfaceOrientationPortraitしかし、私はメソッドに変更しsupportedInterfaceOrientationsます。shouldAutorotateメソッドが呼び出されていますが、次のエラーがあります。

UIApplicationInvalidInterfaceOrientation、理由: 'サポートされている向きにはアプリケーションと共通の向きがなく、shouldAutorotate は YES を返しています'

ちなみに、サポートされているインターフェイスの向きですべての向きを選択します。

編集済み

私はviewControllerを使用し、navigationControllerを埋め込みます。ここに AppDelegate.h があります

@interface AppDelegate : UIResponder <UIApplicationDelegate,UINavigationControllerDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (readonly, strong, nonatomic) UINavigationController *navController;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@end

AppDelegate.m の下の didFinishLaunchingWithOptions メソッド内

      navController = (UINavigationController *)self.window.rootViewController;
                IPad_HomeViewController *rootVC=(IPad_HomeViewController *)navController.topViewController;
                rootVC.managedObjectContext = self.managedObjectContext;
return YES;

私のIPad_HomeViewControllerで、

@interface IPad_HomeViewController : UIViewController <UINavigationControllerDelegate>
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end
4

5 に答える 5

2
- (BOOL) shouldAutorotate {
    return YES;
}

// for landscape
- (NSInteger) supportedInterfaceOrientations {
    return (1 << UIInterfaceOrientationLandscapeLeft) | 
           (1 << UIInterfaceOrientationLandscapeRight);
}

上記のように、特定の向きのマスク値を確認してください: UIInterfaceOrientationMask 値。UIInterfaceOrientationMask

于 2013-01-12T06:44:26.317 に答える
1

2 つのポイント:

  1. ビットマスクを返すUIInterfaceOrientationPortraitからの戻り値として使用するのは意味がないため、エラーメッセージは完全に理にかなっています。supportedInterfaceOrientationsいずれかのUIInterfaceOrientationMask値を使用してください。

  2. 適切な を使用するUIInterfaceOrientationMaskPortraitと、iOS が を呼び出さないように見えることを懸念しているようですshouldAutorotateshouldAutorotate物理デバイスの物理的な向きとアプリの現在の向きを考慮しsupportedInterfaceOrientationsて、回転が必要な場合にのみ呼び出すことができます。shouldAutorotateデバイスが既に許容可能な向きにあると結論付けているかどうかを確認する必要があるのはなぜですか?

詳細については、 supportedInterfaceOrientationsおよびビューの回転の処理を参照してください。

于 2012-12-16T15:30:02.637 に答える
1

I know this sounds pretty elementary, but I was wracking my brain to figure out orientation issues while testing on my iPhone - I had the physical auto lock mode in Portrait mode - so nothing I changed programmatically mattered - thought this should be troubleshooting step number 1!

于 2013-04-30T17:12:02.367 に答える
0

向きの設定を変更するには、メニューの [Targets] -> [Summary] -> [Supported Device Orientations] を選択し、次のように変更します。

向きのボタンが暗い場合は、向きの 1 つとして選択したことを意味します。 ここに画像の説明を入力

于 2012-12-16T15:16:30.900 に答える
0

整数を使用して向きを宣言するのではなく、bool を使用してそこに if ステートメントをプラグインして、必要な向きを検出してみませんか。これがあなたに役立つことを願っているサンプルコードです:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationPortrait) {
    return YES;
}
if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    return YES;
}
return NO;
}

if ステートメントにすべての向きを追加すると、問題なく動作するはずです。エイドリアン

編集:

また、iOS 6 のオプションが必要な場合は、以下のコードで問題なく動作するはずです。

- (BOOL) shouldAutorotate
{
return YES;
 }

-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft   | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}

iOS 6 では、これを使用して、サポートされているほぼすべての向きを変更できます。

編集1:

特定の方法で特定のものだけを回転させるviewcontrollersには、上記で投稿したios 6コードをすべて使用してviewcontrollersください。手順は次のとおりです。

  1. 4つすべてが配置されているプロジェクトレベルで、internfaceorientationsアプリがデフォルトになるようにすべてをオフにしてください。

  2. 私がすべてで提供したios 6コードを実装しますviewcontrollers

  3. yes ではなく、shouldautorotateメソッドで no を宣言します。
  4. 2 番目の方法では、任意のタイプの方向をプラグインします。

これでうまくいくはずです。ハッピーコーディング

于 2012-12-16T15:30:14.743 に答える