4

マウスが動いたときに通知を受け取り、画面上の位置を取得したいと思います。私はこれを試しました:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent *event) {
    CGPoint location = [NSEvent mouseLocation];
    NSLog(@"Position: %@", NSStringFromPoint(location));
}];

ただし、これは、マウスがアプリのウィンドウ内にある場合にのみ機能するようです。離れるとすぐに通知されません。再び窓に入るまで。このイベントはグローバルであるべきではありませんか?

アップデート:

問題のコードを抽出し、別のサンプル プロジェクト ( Dropbox-Link ) を作成しました。念のために言うと、他に干渉するものは何もありません。上記のコードのみのクリーンなプロジェクトapplicationDidFinishLaunching:です。私は同じ結果を得て、それは本当に奇妙です。YouTube に動画をアップロードしました: http://www.youtube.com/watch?v=I3AKgmURaMk

これらは私の観察です:

  1. アプリを起動した直後は、マウスをどこに動かしてもイベントがまったく配信されません。
  2. アプリのウィンドウをクリックすると、何らかの形でイベント配信がアクティブになります。これで、マウスをどこに動かしても NSMouseMovedMask イベントを受け取ります (これが私が達成したいことです)。
  3. クリックして Xcode に戻っても、何も変わりません。私はイベントを取得し続けます。
  4. ただし、フォーカスをアプリに戻すと、奇妙な動作が発生します。マウスを Xcode の上に移動すると、ウィンドウの一部の部分でのみイベントが発生しますが、一部の部分はイベントを吸収しているように見えます。具体的には、エディターまたはログ ビューでイベントを受け取りません。マウスを灰色の分割ビューセパレーター領域 (タブバーが埋め込まれている) の上に移動している間だけ、それらを受け取ります。
4

1 に答える 1

1

ウィンドウがアップしているがフォアグラウンドにないときに奇妙な動作が見られました。アプリケーションがバックグラウンドにあり、ドックにない場合、マウスがフォアグラウンドのウィンドウ間で遷移したときにのみイベントを取得することに気付きました。アプリケーションを最小化すると、この問題が解決するようです。私は cocoa dev/ObjC の初心者です。間違っているかもしれませんが、アプリを最小化すると、すべてのイベントが発生することに気付きました。

于 2013-11-30T16:52:03.290 に答える