swift 区分手指触摸和Apple Pencil触摸

5lwkijsr  于 2022-10-31  发布在  Swift
关注(0)|答案(3)|浏览(373)

我正在使用SceneKit在iPad Pro上渲染一个3D模型。我的要求是,我希望在使用Apple Pencil时执行不同的交互。
是否有办法区分手指触摸和Apple Pencil触摸?
我尝试覆盖touchesBegan函数并过滤Set中的UITouch以忽略pencil类型的函数,但似乎没有任何作用...
编辑:我对处理这两种不同类型的触摸更感兴趣(例如,当有手指触摸事件时,我想执行某个操作A。如果是铅笔触摸,我想执行操作B)。我甚至要覆盖哪些方法来实现这种隔离?

91zkwejq

91zkwejq1#

简单的检查方法是,UITouch对象是否具有来自手写笔的附加信息(如Apple Pencil)。检查该对象上是否存在此信息,如果存在,则UITouch对象来自手写笔。
为了获得更深入的信息,我在下面链接了开发者文档中的Apple Pencil输入指南。
但是,您能否提供代码,因为UITouch上的类型仍应正确报告?
https://developer.apple.com/documentation/uikit/pencil_interactions/handling_input_from_apple_pencil

djmepvbi

djmepvbi2#

关键是UIGestureRecognizer类。“具体手势识别器的基类”apple文档中说
它有一个名为allowedTouchTypes的属性,可用于区分不同类型的触摸。
此属性是一个触摸类型数组,用于识别触摸是直接触摸还是间接触摸。有关所有可能的触摸类型的列表,请参阅UITouch中的UITouch.TouchType枚举。此属性的默认值包含所有触摸类型。
笔势识别器通过以下方式区分触摸类型:在跟踪Apple Pencil触摸时将allowedTouchTypes属性设置为UITouch.TouchType.pencil,UITouch.TouchType.direct在跟踪手指触摸时将其设置为www.example.com。
另外,i've Found this one on the apple documentation .本教程提供了帮助区分手指和苹果笔触摸的辅助方法。=〉

xcitsw88

xcitsw883#

Apple's documentation表示:“来自Apple Pencil的触控对象包含附加信息,包括Apple Pencil的方位角和高度,以及在其尖端记录的力的大小。”然而,检查(touch.altitudeAngle > 0)对我不起作用,因为一些手指触摸也有Angular 设置。我尝试了(touch.majorRadiusTolerance == 0),似乎很可靠。然后我意识到我们可以简单地检查(touch.type == .pencil)

相关问题