如何区分用户是用手指还是用铅笔敲击屏幕?

时间:2016-05-10 08:38:03

标签: ios objective-c stylus-pen

该应用程序支持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属性,但无法知道它是如何工作的。

我的主要问题是,实际上很少有例子,并且它们是快速编写的,但我是在客观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,或者只是一个开头。网站上的教程也很完美,但我认为没有。

2 个答案:

答案 0 :(得分:9)

检查UITouch是否在Objective-C中使用手写笔触摸类型:

if (touch.type == UITouchTypeStylus) {
    // Do stuff
}

如果你没有直接处理触摸,而是使用手势识别器,那么它会更复杂一些。

您可以尝试添加第二个长按手势识别器并在每个上设置allowedTouchTypes属性以识别手写笔或直接触摸:

longPressGestureFinger.allowedTouchTypes = @[@(UITouchTypeDirect)];
longPressGesturePencil.allowedTouchTypes = @[@(UITouchTypeStylus)];

如果这不起作用,则必须向长按手势添加委托,并在gestureRecognizer: shouldReceiveTouch:方法中检查并存储触摸类型,并在手势动作触发时使用此方法。

答案 1 :(得分:1)

iOS 9.1中的UITouch类具有touch属性,该属性返回类型:

typedef enum {
    UITouchTypeDirect,
    UITouchTypeIndirect,
    UITouchTypeStylus       // THIS ONE
} UITouchType;