有什么方法可以处理 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
之类的属性来区分direct
,indirect
或者pencil
。
如果没有办法,或者给我一些UIView的混合技巧,那好吧...
谢谢,
我认为最好的方法是创建自定义 UIGestureRecognizer
。通过这种方式,您可以覆盖 touchesBegan
、touchesMoved
等,并可以访问将包含 UITouch.TouchType
.
的 UITouch
对象
参见 Apple 的示例代码 here,特别是 StrokeGestureRecognizer
class。
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
我想知道是否有办法在 SwiftUI 中处理 Apple Pencil 事件?例如,如果你喜欢处理直接触摸,而 Apple Pencil 则不同,说直接触摸滚动,但 Apple Pencil 画线。
有类似这样的问题。
但是DragGesture
,比如好像没有访问UITouch.TouchType
之类的属性来区分direct
,indirect
或者pencil
。
如果没有办法,或者给我一些UIView的混合技巧,那好吧...
谢谢,
我认为最好的方法是创建自定义 UIGestureRecognizer
。通过这种方式,您可以覆盖 touchesBegan
、touchesMoved
等,并可以访问将包含 UITouch.TouchType
.
UITouch
对象
参见 Apple 的示例代码 here,特别是 StrokeGestureRecognizer
class。
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