2015-09-11 25 views
22

Kannst du die taptic engine in iOS 9 mit iPhone 6s verwenden? WatchOS2 und OS X haben die Möglichkeit, die haptische Engine zu verwenden, also nahm ich an, dass es auch in iOS 9 sein würde, aber ich konnte keine APIs dafür finden.Taptic in iOS 9

+0

"Taptic Engine API" wurde am 07. September 16 Apple Keynote erwähnt, also, nein, es ist nicht auf iOS9, aber es scheint bald zu kommen. – Dimitris

Antwort

2

Derzeit scheint es keine veröffentlichte API für iOS 9 zu geben.

Auf OSX benötigen Sie NSHapticFeedbackManager verwenden:

NSHapticFeedbackManager Class Reference

und hier ist die API für WatchOS2:

WKInterfaceDevice Class Reference

Durch einfaches hier suchen Sie sehen können, was ich bin Sprich:

Haptic search (iOS pre-release) - shows nothing

Haptic search (OSX pre-release) - shows NSHapticFeedbackManager

+0

Die Frage bezieht sich auf iOS 9. Sie haben Links für OS X und WatchOS veröffentlicht. – rmaddy

+0

@rmaddy Antwort aktualisiert. – Woodstock

15

Es gibt derzeit keine öffentlich verfügbaren API in iOS 9 und iOS 9.1.

Haftungsausschluss: Es gibt eine Möglichkeit, direkt mit Taptic Engine zu interagieren, aber es gibt eine private Methode. Sie sollten es nicht in App Store-Anwendungen verwenden.

Wenn Sie jedoch mehr in das Experimentieren sind, finden Sie können dann, dass es eine neue privat Klasse in iOS 9: _UITapticEngine. Sie finden es Header here. Um dorthin zu gelangen, gibt es eine neue Eigenschaft auf Klasse, genannt _tapticEngine. Siehe die vollständige Kopfzeile für here. Sie können diese Header voran gehen und importieren, oder einfach nur NSSelectorFromString Funktion und performSelector: Methode verwenden, um den taptic Motor zu bekommen:

id tapticEngine = [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"_tapticEngine") withObject:nil]; 
[tapticEngine performSelector:NSSelectorFromString(@"actuateFeedback:") withObject:@(1001)]; // Peek 
[tapticEngine performSelector:NSSelectorFromString(@"endUsingFeedback:") withObject:@(1002)]; // Pop 

Dies wird den taptic Motor für bestimmte Geste aktivieren, obwohl beide Peek und Pop mich ähnlich fühlen . Wenn Sie eine andere Konstante angeben, wird standardmäßig eine Vibration verwendet.

UIDevice.currentDevice().tapticEngine().actuateFeedback(UITapticEngineFeedbackPeek) 

Benutzung auf eigene Gefahr: die taptic Engine verwenden

Ich habe Repo zusammen einen schnellen Test zusammen auf GitHub, das einen Swift-kompatible API enthält!

Ich habe auch ein bisschen länger geschrieben blog post, dies zu erklären.

+0

Vielen Dank, dass Sie herausgefunden haben, wie Sie dies tun können, und einen großartigen Blogbeitrag darüber verfassen. Ich habe versucht, dies in einem kleinen App-Experiment von mir zu verwenden, fand aber, dass bei der Verwendung der actuateFeedback-Methode gab es eine Grenze für die Rate der Spitze oder Pop-Feedback, die ich auslösen könnte, etwa 5 oder 6 pro Sekunde. Weißt du, ob es eine Möglichkeit gibt, diese schneller auszulösen? – GuyGizmo

+0

Danke für den Kommentar. Ich glaube, das wäre eine Hardwarebeschränkung. Ansonsten habe ich keine Ahnung, wie ich das machen soll. – Legoless

+0

Hervorragende Antwort! – Klaas

37

Yay, ich hatte reverse engineered interne UIKit Zeug und ich fand eine andere (viel einfachere) Möglichkeit, Feedback über TapticEngine zu aktivieren! Wir können einfach AudioToolbox Rahmen und mehrere magische Konstanten verwenden.

import AudioToolbox 

AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom) 
AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom) 
AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms) 

hoffe, das hilft!

+1

Wow das ist erstaunlich !! Zählt dies jedoch als private API? Sie haben AudioServicesPlaySystemSound in die API-Referenz aufgenommen, aber sie haben nicht angegeben, was die Zahlen bedeuten: O –

+1

Dies ist eine philosophische Frage. In Bezug auf den App Store-Überprüfungsprozess gilt jede nicht öffentliche API als privat, aber technisch gesehen kann fast jede API-Nutzung vom Review-Team verschleiert werden. Ich denke, das Hauptproblem ist hier die angemessene oder unangemessene Verwendung einer bestimmten API. –

+0

danke für Ihre Antwort. Ich versuche, dies in meine WWDC-Stipendien-App einzubauen und möchte deswegen nicht abgelehnt werden. Ich habe die Frage gerade an Apple gesendet und werde sie aktualisieren, wenn sie dazu einen Kommentar hat. –

9

In iOS 10 gibt es eine neue API namens UIFeedbackGenerator. Siehe hierzu post für weitere Details.Es funktioniert nur auf dem iPhone 7 für jetzt.

+0

Interessant. Ich frage mich, welche Art von Einschränkung gibt es die 6S (+) aus Verwenden dieser APIs –

+0

Ich weiß nicht.Vielleicht ist es die andere Art von (physischen) taptic-Engine, vielleicht wird es in einem zukünftigen iOS-Update behoben werden – Tuslareb

+0

Stellen Sie keine Links, die durchschnittliche Link-Halbwertszeit im Internet ist drei Stunden StackOverflow ist hoffentlich für immer, aber nur wenn Sein Inhalt ist * hier *. – mxcl