0

私はiPhoneの開発にかなり慣れていません。私は自分の「ルート」ビューを持っており、それを実装しています

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 

この実装は問題なく機能しています。ユーザーがボタンを押した後、pushViewControllerを実行して、新しいビューをスタックにプッシュします。ユーザーがiPhoneを振ると、現在「ポップされた」ビューに加速度計関連のメソッドが実装されていなくても、加速度計が起動します。別のビューがスタックにプッシュされても、ルートビューはまだアクティブであるように見えます。アクティブなビューではないビューがまだ加速度計に応答しているのはなぜですか?

ありがとう

トム

4

2 に答える 2

1

Actually the root view controller is not inactive in this case. It's just not visible. It is still alive and can receive events.

加速度計のデリゲートで、ルートビューが表示されているかどうかを確認するためのフラグを設定します。ルートビューが表示されている場合にのみ、操作を実行してください。

if (visible) {

    // Do operations
}
于 2011-05-17T04:49:07.443 に答える
0

加速度計は、アクティブまたは非アクティブなビューコントローラーについて何も知らないと思います。

あなたがする唯一のことは、ViewControllerを加速度計への(イベントを受信するための)デリゲートとして設定することです。別のViewControllerをスタックにプッシュした後、元のViewControllerは引き続き存在します。そして、それはイベントを受け取り続けます。

あなたはあなた自身でこれに対処しなければなりません-例えば。ローカル変数をチェックするか、ビューのウィンドウプロパティをチェックします(ただしテストされていません)。

if(self.view.window!= nil){//viewControllerがアクティブです}

于 2011-05-17T04:47:31.377 に答える