2016-05-10 16 views
4

Die App unterstützt iPad Pro und es muss mit dem Apple Pencil funktionieren. Was ich tun möchte, ist zu unterscheiden, ob der Benutzer den Apple Pencil oder seinen Finger verwendet.Wie unterscheidet man, ob ein Benutzer mit dem Finger oder einem Apfelstift auf den Bildschirm tippt?

Etwas wie:

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 
} 

fand ich das UITouchTypeStylus Attribut war aber zu wissen, nicht in der Lage, wie es funktioniert.

Mein Hauptproblem ist, dass es wirklich wenige Beispiele gibt, und sie sind in swift geschrieben, aber ich arbeite in Ziel C. Und ich bin nicht in der Lage, diese Beispiele wirklich zu verstehen.

Schauen Sie sich diese, ist dies eine Funktion aus einer Probe, die ich auf der Apple Entwickler gefunden:

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 

     [...] 
} 

ich jetzt nicht wirklich die Zeit, um rasche zu lernen, leider ... Das ist blockiert ich vollständig.

Also wenn jemand mir einige Objektive in Objective C geben könnte, die mir erlauben, mit dem Apple Pencil zu arbeiten, oder einfach nur einen Anfang. Ein Tutorial auf einer Website wäre auch perfekt, aber ich denke nicht, dass es irgendwelche gibt.

Antwort

8

Um zu überprüfen, ob ein UITouch ist mit dem Stift Notenart in Objective-C mit:

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

Wenn Sie nicht berühren direkt arbeiten, sondern eine Gestenerkenner verwenden, dann ist es etwas komplizierter ist.

Sie könnten versuchen, auf jedem Stift oder direkt berührt eine zweite lange drücken Geste Erkenner und Einstellung der allowedTouchTypes Eigenschaft Hinzufügen zu erkennen:

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

Wenn das nicht funktioniert, Sie einen Delegaten hinzufügen, müssten zu der langen Druckgeste und in der gestureRecognizer: shouldReceiveTouch: Methode, überprüfen und speichern Sie die Art der Berührung und verwenden Sie diese, wenn die Gestenaktion ausgelöst wird.

+0

Es ist mir ein Fehler auf Touch zeigt: „Die Verwendung von nicht deklarierter Bezeichner touch“, wie kann ich dieses Problem lösen? – Kokodelo

+0

Nun, ich nahm an, Sie hatten bereits eine Methode, bei der Sie ein oder mehrere "UITouch" -Objekte hatten, der Beispielcode dient nur zum Testen des Berührungstyps, was Sie gefragt haben. – jrturton

+0

Von nun an habe ich nur mit dem Finger auf meiner Anwendung, und jetzt muss ich den Apple Pencil implementieren. Also nein, Entschuldigung, das habe ich nicht. Kannst du mir bitte ein wenig sagen, wie ich dieses UITouch-Objekt benutzen soll? – Kokodelo

1

Die UITouch Klasse in iOS 9.1 eine touch Eigenschaft hat, die den Typ zurückgibt:

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

Muss ich das irgendwo in meinem Code anzeigen? – Kokodelo

+0

Ja, Sie müssen die Eigenschaft des Touch-Objekts testen, aber Sie müssen diese Deklaration nicht hinzufügen, nein. – trojanfoe

Verwandte Themen