Ответ 1
Вы должны взглянуть на NSEvent метод mouseLocation
редактирование/обновление: Xcode 8.2.1 • Swift 3.0.2
Если вы хотите отслеживать события в любом окне, когда ваше приложение активно, вы можете добавить LocalMonitorForEvents, соответствующий маске mouseMoved, и, если оно не активно, GlobalMonitorForEvents:
class ViewController: NSViewController {
lazy var window: NSWindow = self.view.window!
var mouseLocation: NSPoint {
return NSEvent.mouseLocation
}
var location: NSPoint {
return window.mouseLocationOutsideOfEventStream
}
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: [.mouseMoved]) {
print("mouseLocation:", String(format: "%.1f, %.1f", self.mouseLocation.x, self.mouseLocation.y))
print("windowLocation:", String(format: "%.1f, %.1f", self.location.x, self.location.y))
return $0
}
NSEvent.addGlobalMonitorForEvents(matching: [.mouseMoved]) { _ in
self.mouseLocation = NSEvent.mouseLocation()
print(String(format: "%.0f, %.0f", self.mouseLocation.x, self.mouseLocation.y))
}
}
}
примечание: вам нужно установить для вашего свойства окна acceptptsMouseMovedEvents значение true
window.acceptsMouseMovedEvents = true