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



该应用程序支持iPad Pro,并且必须与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。。。这完全挡住了我的去路。

所以,如果有人能给我一些目标C中的样本,让我可以使用苹果铅笔,或者只是一个开始。网站上的教程也很完美,但我认为没有。

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

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

如果你不是直接处理触摸,而是使用手势识别器,那么这就有点复杂了。

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

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

如果这不起作用,您将不得不向长按手势添加一个代理,在gestureRecognizer: shouldReceiveTouch:方法中,检查并存储触摸类型,并在手势动作触发时使用它。

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

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

相关内容

  • 没有找到相关文章

最新更新