如何区分用户是用手指还是苹果铅笔点击屏幕?
Posted
技术标签:
【中文标题】如何区分用户是用手指还是苹果铅笔点击屏幕?【英文标题】:How to differentiate whether a user is tapping the screen with his finger or an apple pencil? 【发布时间】:2016-09-05 02:52:53 【问题描述】:该应用程序支持 iPad Pro,并且必须与 Apple Pencil 配合使用。我想做的是区分用户是使用 Apple Pencil 还是手指。
类似:
if( the user is pressing the screen with his finger)
do something
else if ( the user is pressing the screen with an Apple Pencil)
do something else
我找到了UITouchTypeStylus
属性,但不知道它是如何工作的。
我的主要问题是示例真的很少,而且它们是用 swift 编写的,但我正在使用 Objective C。而且我无法真正理解这些示例。
看这个,这是我在苹果开发者上找到的一个示例中的一个函数:
func addPointsOfType(var type: LinePoint.PointType, forTouches touches: [UITouch], toLine line: Line, currentUpdateRect updateRect: CGRect) -> CGRect
var accumulatedRect = CGRect.null
for (idx, touch) in touches.enumerate()
let isStylus = touch.type == .Stylus // I think that what I'm looking for is something like that
[...]
不幸的是,我现在真的没有时间学习 swift ......这完全阻止了我。
因此,如果有人可以给我一些 Objective C 的示例,这将使我能够使用 Apple Pencil,或者只是一个开始。网站上的教程也很完美,但我认为没有。
【问题讨论】:
【参考方案1】:检查 UITouch
是否在 Objective-C 中使用手写笔触摸类型:
if (touch.type == UITouchTypeStylus)
// Do stuff
如果您不直接处理触摸,而是使用手势识别器,那么它会稍微复杂一些。
您可以尝试添加第二个长按手势识别器并在每个手势识别器上设置allowedTouchTypes
属性以识别手写笔或直接触摸:
longPressGestureFinger.allowedTouchTypes = @[@(UITouchTypeDirect)];
longPressGesturePencil.allowedTouchTypes = @[@(UITouchTypeStylus)];
如果这不起作用,您将不得不为长按手势添加一个委托,并在gestureRecognizer: shouldReceiveTouch:
方法中检查并存储触摸类型,并在手势操作触发时使用它。
【讨论】:
触摸时显示错误:“使用未声明的标识符触摸”,我该如何解决? 好吧,我假设您已经有一个方法,其中您有一个或多个UITouch
对象,示例代码仅用于测试您所要求的触摸类型。
从现在开始我只是在我的应用程序上使用手指,现在我必须实现 Apple Pencil。所以不,对不起,我没有这个。你能告诉我应该如何使用这个 UITouch 对象吗?
您将上面的测试添加到您已经用于处理手指触摸的代码中,以允许您确定它是手指还是手写笔。如果您有现有的触摸处理代码,那么最好将其放在问题中。如果你不这样做,那么你问错了问题。
您说的是 GestureRecognizer 之类的东西吗?实际上,我正在使用 UILongPressGestureRecognizer 打开对象的编辑窗口。因此,如果是手指,它将显示一个窗口,如果是铅笔,它将显示另一个窗口。您是否更好地理解了我的问题? (这里好像有错误对不起)【参考方案2】:
ios 9.1 中的UITouch
类有一个touch
属性,它返回类型:
typedef enum
UITouchTypeDirect,
UITouchTypeIndirect,
UITouchTypeStylus // THIS ONE
UITouchType;
【讨论】:
是的,您需要测试触摸对象的属性,但您不需要添加该声明,不。以上是关于如何区分用户是用手指还是苹果铅笔点击屏幕?的主要内容,如果未能解决你的问题,请参考以下文章
flutter web中如何区分手指触摸手势和鼠标指针手势?