问题
The App supports iPad Pro and it has to work with the Apple Pencil. What I would like to do is to differentiate whether the user is using the Apple Pencil or his finger.
Something like:
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
}
I found the UITouchTypeStylus
attribute but was not able to know how it works.
My main problem is that there are really few examples, and they are written in swift, but I am working in objective C. And I am not able to really understand these samples.
Look at this, this is a function from a sample that I found on the apple developer:
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
[...]
}
I don't really have the time to learn swift now, unfortunately... This is blocking me completely.
So if someone could give me some samples in Objective C that will allow me to work with the Apple Pencil, or just a beginning. A tutorial on a web site would be perfect also but I don't think there are any.
回答1:
To check if a UITouch
is using the stylus touch type in Objective-C:
if (touch.type == UITouchTypeStylus) {
// Do stuff
}
If you're not handling touches directly, but using a gesture recognizer, then it is a little more complicated.
You could try adding a second long press gesture recogniser and setting the allowedTouchTypes
property on each one to recognise stylus or direct touches:
longPressGestureFinger.allowedTouchTypes = @[@(UITouchTypeDirect)];
longPressGesturePencil.allowedTouchTypes = @[@(UITouchTypeStylus)];
If that doesn't work, you would have to add a delegate to the long press gesture, and in the gestureRecognizer: shouldReceiveTouch:
method, check and store the type of touch and use this when the gesture action fires.
回答2:
The UITouch
class in iOS 9.1 has a touch property which returns the type:
typedef enum {
UITouchTypeDirect,
UITouchTypeIndirect,
UITouchTypeStylus // THIS ONE
} UITouchType;
来源:https://stackoverflow.com/questions/37133248/how-to-differentiate-whether-a-user-is-tapping-the-screen-with-his-finger-or-an