0

私は iOS 5.0 でプロジェクトを開始しました. iOS 6 に更新されました. オリエンテーションで問題に直面しています. テストするためにサンプルアプリケーションを作成し、デリゲートに次のコードを追加しました.

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskAll;
}

そして、私のView Controllerでは、次のメソッドを実装しました...

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

iOS 6.0 について Google で検索した後に行った上記のすべては、アプリケーションをロードするときに、supportedInterfaceOrientations ビューで指定されたオプションに基づいてロードされますが、デバイスの向きを変更すると、ビューがそれに応じて変化しませんデバイスの向きに基づいてビューを変更するにはどうすればよいですか?

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[notificationCenter addObserver:self
                       selector:@selector(deviceOrientationDidChange) 
                           name:UIDeviceOrientationDidChangeNotification object:nil];

上記のようにオブザーバーを追加し、プログラムで変更する必要がありますか? または、デバイスの向きを検出してビューが自動的に変更されますか?

4

3 に答える 3

4

これを試して

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}


- (BOOL) shouldAutorotate {
    return YES;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscape;
}

前のコードは iOS6 で動作するはずです

とにかく、私は自分のプロジェクトの 1 つでこのコードを使用します。booleanがあり、を表示する前_firstTimeに に設定し、 が表示された後に に変更しますYESviewControllerNOviewController

- (NSUInteger)supportedInterfaceOrientations {
    if (_firstTime) {
        return UIInterfaceOrientationMaskLandscape;
    } else {
        return UIInterfaceOrientationMaskAll;
    }

}

- (BOOL) shouldAutorotate {

        return YES;

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (_firstTime) {
        return return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    } else {
        return YES;
    }
}
于 2013-01-02T10:45:57.083 に答える
1

これらのメソッドの変更:

-(NSUInteger)supportedInterfaceOrientations
{
  return UIInterfaceOrientationMaskAll;
}

: observerforを追加する必要はありませんdevice notification。以下のメソッドで方向ステータスを指定します。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

編集:に従ってあなたのviews意志をすべて提供してくださいautomaskingrequirement

編集: 使用する場合、UINavigation Controllerそのメソッドは使用できません。child View Controller's supportedInterfaceOrientationsshouldAutorotatecalled

このリンクを参照してください。

于 2013-01-02T10:33:57.890 に答える
0

問題はiPadにあります。自動回転の変更を制限するボタンがあります... iPod で完全に作業していたので、最初は気づきませんでした.. 助けてくれてありがとう。

于 2013-01-02T12:52:17.853 に答える