Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to differentiate whether a user is tapping the screen with his finger or an apple pencil?

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.

like image 964
Kokodelo Avatar asked May 10 '16 08:05

Kokodelo


People also ask

How do you use the Apple Pencil swipe?

Apple does allow the Pencil to swipe up and down to scroll up and down and to scroll side to side, but that is about it. So, basically the Pencil has not been allowed, as yet, to perform many swiping gestures that our fingers and simple, commonplace capacitive stylii can do.

How do you draw on screen with Apple Pencil?

To draw with Apple Pencil, tap your Pencil on the page. To use your finger, or if you've turned on Select and Scroll, tap the Insert button , tap the Media button , then tap Drawing. Tap one of the four drawing tools at the bottom of the screen: the pen, pencil, crayon, or the fill tool.

Does Apple Pencil have pressure sensitivity?

Apple Pencil sets the standard for how drawing, note‑taking, and marking up documents should feel — intuitive, precise, and magical. All with imperceptible lag, pixel‑perfect precision, tilt and pressure sensitivity, and support for palm rejection. Incredibly easy to use and ready when inspiration strikes.


2 Answers

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.

like image 190
jrturton Avatar answered Nov 14 '22 22:11

jrturton


The UITouch class in iOS 9.1 has a touch property which returns the type:

typedef enum {
    UITouchTypeDirect,
    UITouchTypeIndirect,
    UITouchTypeStylus       // THIS ONE
} UITouchType;
like image 31
trojanfoe Avatar answered Nov 14 '22 23:11

trojanfoe