Получение координат мыши в Swift

Свифт, новичок здесь.

У меня были проблемы с задачей, которая должна быть тривиальной. Все, что я хочу сделать, это получить координаты x, y курсора мыши по требованию . Я бы предпочел, чтобы не ожидал срабатывания события перемещения мыши, прежде чем я смогу получить координаты указателя.

Буду признателен за любую помощь!

10 голосов | спросил MattY 11 AM00000030000003931 2015, 03:40:39

1 ответ


0

Вы должны взглянуть на метод NSEvent /NSEvent /mouseLocation" rel =" nofollow noreferrer "> 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))
        }
    }
}

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

Если вы хотите отслеживать местоположение мыши, вам нужно создать собственное окно и переопределить событие mouseMoved следующим образом:

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)" )
    }
}

примечание: вам необходимо установить для свойства окна acceptptsMouseMovedEvents значение true.

func applicationDidFinishLaunching(aNotification: NSNotification) {
    window.acceptsMouseMovedEvents = true
}
ответил Leo Dabus 11 AM00000050000000231 2015, 05:05:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132