2015-08-11 20 views
7

Swift newbie qui.Ottenere coordinate mouse in Swift

Ho avuto problemi con un'attività che dovrebbe essere banale. Tutto quello che voglio fare è ottenere le coordinate x, y del cursore del mouse su richiesta. Preferirei non attendere l'attivazione di un evento di movimento del mouse prima di poter afferrare le coordinate del puntatore.

Apprezzerei qualsiasi aiuto!

risposta

15

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 
} 
+2

Grazie per l'eccellente risposta. Funziona perfettamente. NSEvent è una miniera d'oro. :) – MattY

+0

@MattY siete i benvenuti –

+1

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

Problemi correlati