0

デバイスの向きが変わったときに通知を受け取りたいのですが。通知を受け取ることを想定したテストメソッドを設定しました。私はそれを達成するためにいくつかの異なるオブザーバーを試していますが、どれも機能していません。testMethodが起動されないのはなぜですか?

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    // register for orientation change notification

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testMethod)     name:@"UIDeviceOrientationDidChangeNotification" object:nil];

    [[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(testMethod)
                                             name: UIApplicationWillChangeStatusBarOrientationNotification
                                           object: nil];
    [[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(testMethod)
                                             name: UIApplicationDidChangeStatusBarOrientationNotification
                                           object: nil];
}

- (void)testMethod
{
    NSLog(@"phone was rotated");
}
4

4 に答える 4

1

誤って携帯電話の回転ロックをかけてしまいました。常に複数の電話でテストしてください。

于 2012-08-09T21:23:16.353 に答える
0

UIDeviceOrientationDidChangeNotification である方向通知を使用する必要があります。UIDeviceOrientationDidChangeNotification である定数の実際の内容がわからないため、@"UIDeviceOrientationDidChangeNotification" 内に配置しないでください。ビューコントローラーを使用しているようです。willRotateToInterfaceOrientation:duration: および didRotateFromInterfaceOrientation: を使用する必要があります。

于 2012-08-09T18:03:51.683 に答える
0

bool 型の終了 方向を設定します .write を返します ビューのすべての端で yes を返します

于 2012-08-09T18:12:04.800 に答える
0

向きの変更通知だけが必要な場合は、beginGeneratingDeviceOrientation などを使用する必要はまったくありません。didRotateFromInterfaceOrientation:メソッドを使用するだけです。

起動されていない場合は、適切なビュー コントローラーにいないことを意味します。このメソッドは、トップ ビュー コントローラー (つまり、ウィンドウのルート ビュー コントローラー) でのみ呼び出されますが、UINavigationControllers は適切であり、それらのビュー コントローラーに引き渡されると思います。

言い換えれば、これを間違ったView Controllerでキャッチしようとしているようです。

于 2012-08-09T19:51:33.183 に答える