gpt4 book ai didi

快速 Mac 操作系统 : make trackpad reflect display size for NSTouch events

转载 作者:行者123 更新时间:2023-11-30 10:50:06 26 4
gpt4 key购买 nike

我试图让触摸事件在移动时将触控板作为显示器。

我的意思是:

考虑一个 Mac 笔记本电脑显示屏,并想象它与触控板的大小完全相同,或者这就是我希望实现触摸事件的方式。 NSEvent 之前有一个标准化的 x y 坐标属性,这可能给了我这个,但它似乎已被弃用。

下面是 touchBegan 和 touchMoved 覆盖以及我的意思:

override func touchesBegan(with event: NSEvent) {
CGDisplayMoveCursorToPoint(CGMainDisplayID(), event.location(in: overlayScene))
let player = SCNAudioPlayer(source: tick)
sineNode.addAudioPlayer(player)
}

override func touchesMoved(with event: NSEvent) {
let location = event.location(in: overlayScene)
guard let node = overlayScene.nodes(at: location).first else{
if currentSKNode != nil{
currentSKNode = nil
}
return
}
if currentSKNode != node{
currentSKNode = node
print(node.name)
let player = SCNAudioPlayer(source: tick)
sineNode.addAudioPlayer(player)
}
}

想象一个 fgraph 阅读器,其中 x 轴和 y 轴正好以触控板的宽度/2 和高度/2 为中心。当我触摸它的任何地方时,这应该准确反射(reflect)在设置为全屏的应用程序窗口上。

目前,当我从左到右完全移动时,鼠标光标似乎仅部分穿过显示屏,因此尝试将鼠标光标重新定位到 NSView 的位置,或者在本例中为 SKScene。

最佳答案

好吧,事实证明,正如 Kent 提到的,规范化位置并未被弃用,但我正在研究 NSEvent 而不是 NSTouch。

对于任何可能遇到相同要求的人来说,这里都是代码。工作正常,现在只需要弄清楚如何使其尽可能响应。

override func touchesMoved(with event: NSEvent) {
DispatchQueue.main.async {
let touch = event.touches(matching: .moved, in: self.sceneView).first
let normalised = touch!.normalizedPosition
let translated = CGPoint(x: self.width*normalised.x - self.widthCenter, y: self.height*normalised.y - self.heightCenter)
guard let node = self.overlayScene.nodes(at: translated).first else{
self.currentSKNode = nil
return
}
if self.currentSKNode != node{
self.currentSKNode = node
let player = SCNAudioPlayer(source: self.tick)
self.sineNode.addAudioPlayer(player)
}
}
}

关于快速 Mac 操作系统 : make trackpad reflect display size for NSTouch events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com