该应用程序支持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;