Si dovrebbe dare un'occhiata al metodo di NSEvent mouseLocation
modifica/aggiornamento: Xcode 8.2.1 • Swift 3.0.2
Se si desidera monitorare gli eventi in qualsiasi finestra quando la vostra applicazione è attiva, è possibile aggiungere un LocalMonitorForEvents corrispondenti mouseMoved maschera e se non è attivo un 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))
}
}
}
Swift 2
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var mouseLocation: NSPoint {
return NSEvent.mouseLocation()
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
println("Mouse Location X,Y = \(mouseLocation)")
println("Mouse Location X = \(mouseLocation.x)")
println("Mouse Location Y = \(mouseLocation.y)")
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
Se si desidera monitorare la posizione del mouse è necessario creare una finestra personalizzata e sovrascrivere evento mouseMoved come segue:
class CustomWindow: NSWindow {
var mouseLocation: NSPoint {
return NSEvent.mouseLocation()
}
override func mouseMoved(theEvent: NSEvent) {
println("Mouse Location X,Y = \(mouseLocation)")
println("Mouse Location X = \(mouseLocation.x)")
println("Mouse Location Y = \(mouseLocation.y)")
}
}
nota: è necessario impostare la vostra proprietà window accettaMouseMovedEvents su true.
func applicationDidFinishLaunching(aNotification: NSNotification) {
window.acceptsMouseMovedEvents = true
}
fonte
2015-08-11 02:05:02
Grazie per l'eccellente risposta. Funziona perfettamente. NSEvent è una miniera d'oro. :) – MattY
@MattY siete i benvenuti –
Ottima soluzione @Leo! Tuttavia, non ho potuto scoprire come ricevere il 'mouseLocation' se la sua posizione è al di fuori della mia finestra personalizzata. Voglio ottenere una sorta di selettore di colori e voglio disegnare una vista personalizzata oltre al cursore. Sarebbe bello se tu potessi guidarmi nella giusta direzione! – ixany