5

setAcceptsTouchEvents:YESトラックパッドのカスタムタッチイベントを認識するために使用しようとしています。トラックパッドに触れるだけでは、何も起こりませんtouchesBeganWithEvent。しかし、ピンチやスクロールなどのジェスチャをトラックパッドで実行すると、touchesBeganWithEventスタートが正しく機能し始めます。そのジェスチャーの1つの後、トラックパッドに触れるだけでも機能しtouchesBeganWithEventます。しかし、私はtouchesBeganWithEvent前にジェスチャーをする必要なしに簡単なタッチで使う必要があります。のように、を初期化するためにジェスチャーを実行する必要があるようですsetAcceptsTouchEvents:YES。私は何が間違っているのですか?

PS:setAcceptsTouchEvents:YESはにinitWithFrameあり、アプリケーションの起動時に実行されていることがわかります。

4

2 に答える 2

3

この問題は、macOS を再起動するか、ログアウトしてから再度ログインすると消えることがわかりました。Macbookのすべてのアプリケーションを閉じる、デスクトップを切り替える、OSをスタンバイにしてから戻ってくるなど、問題を解決できる他のことを試みましたが、問題を解決する唯一の方法はログオフまたは再起動することですOS。

そのため、問題が解決したらアプリを起動し、トラックパッドに触れるだけで touchesBeganWithEvent がディスパッチされます。その後、数時間後に問題が再び発生し、ピンチやスクロールなどのジェスチャーを行うまで touchesBeganWithEvent が機能しなくなります。アプリを閉じてやり直すと、ジェスチャーをやり直す必要があります。

なぜこれが起こっているのか誰にも分かりますか?

于 2012-09-01T15:57:31.323 に答える
2

ドキュメントから:

イベントは、キー ウィンドウのタッチ下のビューに送信されます。このビュー (またはこのビューの子孫) で開始された一連のタッチを取得するには、[event touchesMatchingPhase:NSTouchPhaseBegan inView:self] を送信します。

いくつかの考え:

  1. タッチ イベントをインターセプトしている子孫ビューがないことを確認します。
  2. タッチ イベントを実行する前にプログラムでウィンドウをキー ウィンドウにしてみて、これにより touchesBeganWithEvent が呼び出されるかどうかを確認してください。
于 2012-10-22T14:07:01.127 に答える