0

このコードを使用して振動検出を行っていますが、ほとんどの場合、正常に動作します。

    - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
 if (event.type == UIEventSubtypeMotionShake) {
  if ( event.subtype == UIEventSubtypeMotionShake )
  {
   NSLog (@"Shake Called");
  }  
 }

これが機能するためには、私が持っているこれらも使用する必要があると思います:

    - (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (void)viewDidDisappear:(BOOL)animated {
    [self resignFirstResponder];
    [super viewDidDisappear:animated];
}

これはすべてうまく機能し、プログラムmotionEndedのリンクをクリックするまで、シェイクするたびに呼び出されます。webViewビューを上下にスクロールでき、シェイクは引き続き機能しますが、ビューが新しいページをロードするとすぐに、motionEndedシェイクすると呼び出されなくなります。これは、シミュレーターと実際のデバイス (iPhone 3G、iOS4) の両方で発生します。私の限られた理解から、それはファーストレスポンダーと関係があると信じていますが、間違っている可能性があります!

4

2 に答える 2

2

私は自分の質問に答えることができました。同様の問題を抱えている可能性のある他の人の参考として、問題は、webView のリンクをクリックすると (またはテキスト ボックスを編集するか、同様のアクションを実行すると)、viewController がファーストレスポンダでなくなることです。私の場合の問題を解決するための答えは、新しいページが読み込まれた後、viewController を最初の応答者にすることでした。

    - (void)webViewDidFinishLoad:(UIWebView *)nameOfWebView {
    [self becomeFirstResponder];
}
于 2010-06-30T11:53:41.943 に答える
0

私は同じ問題を抱えていますが、Web ビューの読み込みが終了したときに最初のレスポンダーになっても解決しません。新しいページがロードされたときに webViewDidFinishLoad が呼び出されることを知っています。また、web ビューをタップしてからシェイクまたはシェイクをシミュレートしてフォーカスすると、motionEnded が呼び出されることも知っています。

于 2010-10-28T12:59:52.490 に答える