我正在使用SceneKit在iPad Pro上渲染3D模型。我的要求是我想在使用Apple Pencil时执行不同的交互。
有没有办法区分手指触摸和Apple Pencil触摸?
我尝试覆盖 touchesBegan
函数并过滤Set
中的UITouch
以忽略类型 pencil
的函数,但这似乎没有任何作用......
编辑:我对处理这两种不同类型的触摸更感兴趣(即当有手指触摸事件时,我想做一些动作A。如果是铅笔,我想做动作B(。我甚至会覆盖哪些方法来实现这种隔离?
简单的检查方法是 UITouch 对象将具有来自手写笔(如 Apple Pencil(的其他信息。检查对象上是否存在此信息,如果存在,则 UITouch 对象来自触笔。
有关更深入的信息,我在下面链接了开发人员文档中的Apple Pencil输入指南。
但是,您能否提供代码,因为 UITouch 上的类型仍应正确报告?
https://developer.apple.com/documentation/uikit/pencil_interactions/handling_input_from_apple_pencil
关键是 UIGestureRecognizer 类。 "具体手势识别器的基类"苹果文档说
它具有一个名为 allowedTouchType 的属性,可用于区分不同类型的触摸。
此属性是一组触摸类型,用于识别触摸是直接的还是间接的。有关所有可能的触摸类型的列表,请参阅 UITouch.TouchType 枚举 UITouch。此属性的默认值包含所有触摸类型。
手势识别器通过在跟踪 Apple Pencil 触摸时将 allowedTouchType 属性设置为 UITouch.TouchType.pencil,在跟踪手指触摸时将 UITouch.TouchType.direct 设置为 UITouch.TouchType.direct,从而区分触摸类型。
另外,我在苹果文档中找到了这个。本教程提供了可帮助区分手指和 Apple 铅笔触摸的帮助程序方法。=>
苹果的文档说,"源自Apple Pencil的触摸对象包含其他信息,包括Apple Pencil的方位角和高度以及在其尖端记录的力的大小。 但是,检查(touch.altitudeAngle > 0)
对我不起作用,因为某些手指触摸也有角度设置。我尝试了(touch.majorRadiusTolerance == 0)
,这似乎是可靠的。然后我意识到我们可以简单地检查(touch.type == .pencil)
.