###前提・実現したいこと
OSXのアプリをSwiftで作成しています。
自アプリが非アクティブのときに、ドラッグされたイベントを正しく取得したいのです。
つまり、外部アプリのドラッグアンドドロップ操作をフックしたい。
NSEvent.addGlobalMonitorForEventsMatchingMask
を使用して実現しようとしていますが、
ドラッグ開始1秒後〜ドラッグ終了直前までのイベントが正しく取得できません。
OSXのバージョン 10.11.2
Xcode Version 7.2.1
BaseSDK OSX 10.11
###現象
以下の画像は、マウスカーソルを(280, 320)から右方向におおよそ一定の速度でドラッグを行ったときのログです。
最初の方はイベントを取得できていますが、最後の2行を見ると、
(347, 319)から(1187, 319)まで一気に飛んでいます。
これはドラッグを終了した地点です。
###ソースコード
Swift
1class ViewController: NSViewController { 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 } 6 7 override func viewWillAppear() { 8 super.viewWillAppear() 9 10 NSEvent.addGlobalMonitorForEventsMatchingMask(.LeftMouseDraggedMask, handler: { (event: NSEvent) -> Void in 11 print(NSDate.init(), event.locationInWindow) 12 }) 13 14 } 15 16 override var representedObject: AnyObject? { 17 didSet { 18 } 19 } 20} 21
###補足情報
イベント監視の解放処理などは除いています。
自アプリのイベントを取得する
NSEvent.addLocalMonitorForEventsMatchingMask
では、ドラッグ処理を正しく取得できることを確認しています。
回答1件
あなたの回答
tips
プレビュー