swift - 如何在 macOS SwiftUI 视图中读取和访问鼠标光标位置?
问题描述
这是我非常简单的入门项目,正如您在问题标题中看到的那样,当鼠标悬停或移动到 macOS SwiftUI 中的视图上时,我想读取鼠标光标的位置。对于初学者项目,我使用了手势!手势的问题是用户应该进行某种点击或拖动,这会触发手势,但我想在无需点击或拖动的情况下获得手势的所有好处,我该怎么做?
struct ContentView: View {
@State private var location: CGPoint = .zero
var body: some View {
return VStack {
Spacer()
HStack {
Spacer()
Text("location is: ( \(location.x), \(location.y))").bold()
Spacer()
}
Spacer()
}
.background(Color.yellow)
.gesture(DragGesture(minimumDistance: 0, coordinateSpace: .local)
.onEnded { value in location = value.location })
}
}
解决方案
尝试使用下面的代码,注意它将提供屏幕内的当前整体鼠标位置,而不仅仅是窗口内。但是,您可以使用.onHover方法 来了解鼠标何时位于视图上。
struct ContentView: View {
var mouseLocation: NSPoint { NSEvent.mouseLocation }
@State var isOverContentView: Bool = false
var body: some View {
ZStack{
//Place your view
Image(systemName: "applelogo")
.resizable()
.scaledToFill()
.frame(width: 200, height: 200)
.onHover{ on in
isOverContentView = on
}
}
.frame(width: 600, height: 600)
.onAppear(perform: {
NSEvent.addLocalMonitorForEvents(matching: [.mouseMoved]) {
print("\(isOverContentView ? "Mouse inside ContentView" : "Not inside Content View") x: \(self.mouseLocation.x) y: \(self.mouseLocation.y)")
return $0
}
})
}
}
推荐阅读
- nestjs - 无法使用 yarn 作为包管理器创建新的 Nest 项目
- elasticsearch - 如何在 ElasticSearch 中查询没有日期的时间范围?
- javascript - 获取列表中的 img 大小
- cypher - 适用于 AWS Neptune 的 openCypher 客户端
- java - ListView 中使用 BaseAdapter 隐藏的相对布局
- mysql - 在 mysql 上创建带有触发器的电子邮件
- javascript - React:我刚刚声明的一个值被提示为“未定义”
- javascript - 在亚马逊上使用 puppetetteer 将商品添加到购物车
- c# - 短路动作过滤器时如何绕过资源过滤器?
- git - “错误:无法在后台生成 fsmonitor--daemon”当我在 Git GUI 中进行更改时