7

该应用程序支持 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 编写的,但我正在使用目标 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,或者只是一个开始。网站上的教程也很完美,但我认为没有。

4

2 回答 2

12

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

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

如果您不直接处理触摸,而是使用手势识别器,那么它会稍微复杂一些。

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

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

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

于 2016-05-10T08:42:22.533 回答
1

iOS 9.1 中的UITouch类有一个touch返回类型的属性:

typedef enum {
    UITouchTypeDirect,
    UITouchTypeIndirect,
    UITouchTypeStylus       // THIS ONE
} UITouchType;
于 2016-05-10T08:42:47.913 回答