【发布时间】:2015-11-03 01:36:03
【问题描述】:
这里是 Swift 新手。
我在完成一项本应是微不足道的任务时遇到了麻烦。我想要做的就是得到鼠标光标的 x,y 坐标on-demand。我希望 not 等待鼠标移动事件触发,然后才能获取指针的坐标。
不胜感激!
【问题讨论】:
这里是 Swift 新手。
我在完成一项本应是微不足道的任务时遇到了麻烦。我想要做的就是得到鼠标光标的 x,y 坐标on-demand。我希望 not 等待鼠标移动事件触发,然后才能获取指针的坐标。
不胜感激!
【问题讨论】:
你应该看看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
}
}
【讨论】:
mouseLocation 的位置在我的自定义窗口之外,我不知道如何接收它。我想实现某种颜色选择器,并想在光标之外绘制一个自定义视图。如果你能带领我走向正确的方向,那就太好了!
NSEvent.addLocalMonitorForEvents(matching: .mouseMoved) { print(NSEvent.mouseLocation()) return $0 } 如果您想在您的应用不活动时对其进行监控,只需使用全局而不是本地
lazy var window: NSWindow = self.view.window!,然后访问 NSWindow 属性 mouseLocationOutsideOfEventStream window.mouseLocationOutsideOfEventStream。检查上次编辑如何监视鼠标位置及其在窗口中的位置。
可以通过这种方式获取当前鼠标位置:
在你的视图控制器类中声明这个:
var mouseLocation: NSPoint? { self.view.window?.mouseLocationOutsideOfEventStream }
然后,您可以获取当前鼠标位置并转换为您想要的视图坐标:
if let currentMouseLocation = self.mouseLocation{
let pointInTargetView = self.**targetView**.convert(currentMouseLocation, from: self.view)
}
【讨论】: