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