在 SwiftUI (iPadOS) 中获取移动指针的坐标

Get Coordinates of Moving Pointer in SwiftUI (iPadOS)

在 iPad 上,我正在尝试构建一个简单的应用程序,它 连续 跟踪指针在屏幕上移动时的坐标(通过外部 mouse/trackpad).基本上是这样 JavaScript example @ 4:13 除了在 iPad.

上的 SwiftUI 视图中

MacOS 有 ,但似乎没有 iPadOS 对应的。我在网上遇到的每个资源都必须将坐标与手势(旋转、捏合、拖动、单击等)相关联,而无法响应 only 光标移动。这让我相信纯指针移动的解决方案可能独立于手势协议。

修改此 中的代码后,我能够做到一半。我下面的代码会显示更新的鼠标坐标 只要指针在拖动 (即至少按下一个按钮时)。

import SwiftUI

struct ContentView: View {
    @State private var pt = CGPoint()
    @State private var txt = "init"

    var body: some View {
        let myGesture = DragGesture(
            minimumDistance: 0,
            coordinateSpace: .local
        )
        .onChanged {
            self.pt = [=10=].location
            self.txt = "x: \(self.pt.x), y: \(self.pt.y)"
        }


        // Spacers needed to make the VStack occupy the whole screen
        return VStack {
            Spacer()
            Text(self.txt)
            Spacer()
        }
        .frame(width: 1000, height: 1000)
        .border(Color.green)
        .contentShape(Rectangle()) // Make the entire VStack tappabable, otherwise, only the area with text generates a gesture
        .gesture(myGesture) // Add the gesture to the Vstack
    }
}

现在,如何实现这种效果而无需 拖动?如果不可能有纯粹的 Swift 解决方案,在 objective-C 的帮助下是否有某种方法可以做到这一点?

谢谢

编辑:

WWDC 视频涵盖了这个主题:

Handle trackpad and mouse input

SupportsIndirectInputEvents 添加到您的 Info.plist

来自视频:

It is required in order to get the new touch type indirect pointer and EventType.transform. Existing projects do not have this key set and will need to add it. Starting with iOS 14 and macOS Big Sur SDKs, new UIKit and SwiftUI projects will have this value set to "true."

此外,您将使用 UIPointerInteraction。本教程逐步向您展示包括自定义游标:

https://pspdfkit.com/blog/2020/supporting-pointer-interactions/