有什么方法可以处理 and/or 区分 Apple Pencil 和 SwiftUI 中的直接触摸吗?

Is there any ways to handle and/or distinguish Apple Pencil and direct touches in SwiftUI?

我想知道是否有办法在 SwiftUI 中处理 Apple Pencil 事件?例如,如果你喜欢处理直接触摸,而 Apple Pencil 则不同,说直接触摸滚动,但 Apple Pencil 画线。

有类似这样的问题。

但是DragGesture,比如好像没有访问UITouch.TouchType之类的属性来区分directindirect或者pencil

如果没有办法,或者给我一些UIView的混合技巧,那好吧...

谢谢,

我认为最好的方法是创建自定义 UIGestureRecognizer。通过这种方式,您可以覆盖 touchesBegantouchesMoved 等,并可以访问将包含 UITouch.TouchType.

UITouch 对象

参见 Apple 的示例代码 here,特别是 StrokeGestureRecognizerclass。

extension MTKView{
    public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print(touches.first?.type.rawValue)
    }
}

这是您提到的混合技术。它超级简单而强大。您可以包装一个自定义的 UIViewController 来处理 touchEvents,并在 SwiftUI 中使用它。您需要做的就是创建一个符合 UIViewControllerRepresentable.

的结构

https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable

如果您需要使用 SwiftUI 访问 UIKit 手势。此线程可以帮助您入门:

您将使用UIViewControllerRepresentable