在 Swift 中获取鼠标坐标
Posted
技术标签:
【中文标题】在 Swift 中获取鼠标坐标【英文标题】:Getting Mouse Coordinates in Swift 【发布时间】:2015-11-03 01:36:03 【问题描述】:这里是 Swift 新手。
我在完成一项本应是微不足道的任务时遇到了麻烦。我想要做的就是得到鼠标光标的 x,y 坐标on-demand。我希望 not 等待鼠标移动事件触发,然后才能获取指针的坐标。
不胜感激!
【问题讨论】:
【参考方案1】:你应该看看NSEvent方法mouseLocation
编辑/更新:Xcode 11 • Swift 5.1
如果您想在您的应用程序处于活动状态时监视任何窗口上的事件,您可以添加一个与 mouseMoved 掩码匹配的 LocalMonitorForEvents,如果它不活动,则添加一个 GlobalMonitorForEvents。请注意,您需要将窗口属性 acceptsMouseMovedEvents
设置为 true
import Cocoa
class ViewController: NSViewController
lazy var window: NSWindow = self.view.window!
var mouseLocation: NSPoint NSEvent.mouseLocation
var location: NSPoint 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
print(String(format: "%.0f, %.0f", self.mouseLocation.x, self.mouseLocation.y))
override func viewWillAppear()
super.viewWillAppear()
window.acceptsMouseMovedEvents = true
Sample project
【讨论】:
感谢您的出色回答。完美运行。 NSEvent 是一座金矿。 :) 很好的解决方案@Leo!但是,如果mouseLocation
的位置在我的自定义窗口之外,我不知道如何接收它。我想实现某种颜色选择器,并想在光标之外绘制一个自定义视图。如果你能带领我走向正确的方向,那就太好了!
@ixany 抱歉耽搁了我刚刚看到你的问题。您可以使用NSEvent.addLocalMonitorForEvents(matching: .mouseMoved) print(NSEvent.mouseLocation()) return $0
如果您想在您的应用不活动时对其进行监控,只需使用全局而不是本地
很好的答案,如果我只想在 NSView 中跟踪鼠标,该怎么做? (我也是 Mac 开发的新手..)
@Nils 您可以使用惰性关键字将窗口属性添加到视图控制器,如下所示lazy var window: NSWindow = self.view.window!
,然后访问 NSWindow 属性 mouseLocationOutsideOfEventStream window.mouseLocationOutsideOfEventStream
。检查上次编辑如何监视鼠标位置及其在窗口中的位置。【参考方案2】:
可以通过这种方式获取当前鼠标位置:
在你的视图控制器类中声明这个:
var mouseLocation: NSPoint? self.view.window?.mouseLocationOutsideOfEventStream
然后,您可以获取当前鼠标位置并转换为您想要的视图坐标:
if let currentMouseLocation = self.mouseLocation
let pointInTargetView = self.**targetView**.convert(currentMouseLocation, from: self.view)
【讨论】:
以上是关于在 Swift 中获取鼠标坐标的主要内容,如果未能解决你的问题,请参考以下文章