Überprüfen Sie, ob das Gerät unterstützt UIFeedbackGenerator in iOS 10
In iOS 10, es gibt eine neue api, die es Entwicklern ermöglicht, zu nutzen, die taptic engine, UIFeedbackGenerator.
Während dieser api ist verfügbar in iOS 10, es funktioniert nur auf den neuen Geräten, iPhone 7 und 7 plus. Es funktioniert nicht auf älteren Geräten, wie dem 6S oder 6S Plus, auch diese haben ein taptic engine. Ich denke, die taptic engine, die auf der 7 und 7 plus ist ein anderes mehr mächtig.
Ich kann nicht scheinen zu finden ein Weg, um zu sehen, ob das Gerät unterstützt die Verwendung der neuen api. Ich würde gerne tauschen vibrieren code mit taptic-code, wo es Sinn macht.
Edit:
Hinzufügen der 3 konkrete Unterklassen für recherchezwecke:
UIImpactFeedbackGenerator
UINotificationFeedbackGenerator
UISelectionFeedbackGenerator
Edit 2:
Ich habe eine Theorie, aber keine iPhone-7-Gerät, um es zu testen, so dass, wenn Sie eine haben, give it a shot. UIFeedbackGenerator hat einen aufgerufenen Methoden prepare(). Beim drucken aus einer Instanz von UIImpactFeedbackGenerator, bemerkte ich, dass es gedruckt wird eine Eigenschaft mit dem Namen "vorbereitet", die zeigen, 0. Aufrufen von prepare() im simulator oder auf dem iPhone 6S und drucken Sie dann aus der Instanz zeigt immer noch bereit, als 0. Kann jemand, der Aufruf von prepare() für eine Instanz von UIImpactFeedbackGenerator von einem iPhone7 und drucken Sie dann die Instanz auf die Konsole, um zu sehen, wenn man bereit ist, auf 1 gesetzt? Dieser Wert ist nicht ausgesetzt, aber es kann ein Weg, um diese Informationen zu bekommen w/o Verwendung von privaten apis.
- Nach dem, was ich gelesen habe, brauchen Sie nicht zu überprüfen, ob das Gerät unterstützt die folgenden APIs. Aufrufen wird leise wenn Sie aufgerufen wird, auch auf älteren Geräten.
- Ich muss schauen für meine eigenen Zwecke. Ich bin Umschaltung zwischen ein vibrieren und ein taptic feedback, ich möchte nicht beide spielen in der gleichen Zeit auf Geräten, die es unterstützen.
- Wir fallen zurück auf standard "- Gerät vibration", wenn es nicht zur Verfügung, als dies bereits in früheren OS-Versionen und auch auf älterer hardware. Müssen wissen, ob es möglich ist, zu tun, die haptische Weise oder nicht.
- können Sie einen link zu Google docs darüber. Ich habe tatsächlich versucht, und war nicht immer eine Schwingung.
- Wie bereits erwähnt, muss ich auch wissen, ob dies möglich ist. Jemand erwähnte, dass
UIDevice
hat einige flags auf, dass es vielleicht sein könnte, geprüft werden, aber das ist keine öffentliche API. - Wenn "edit 2" für Sie funktioniert, bitte nach einer anderen Lösung unter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, anscheinend kann man mit einem private-API-Aufruf.
Objective-C:
[[UIDevice currentDevice] valueForKey:@"_feedbackSupportLevel"];
Swift:
UIDevice.currentDevice().valueForKey("_feedbackSupportLevel");
... Diese Methoden scheinen zurück:
0
= Taptic nicht verfügbar1
= Erste generation (getestet auf einem iPhone 6s) ... was NICHT unterstütztUINotificationFeedbackGenerator
usw.2
= Zweite generation (getestet auf einem iPhone 7) ... die hat unterstützen.Leider es gibt zwei Vorbehalte hier:
Besonderen Dank an Tim Oliver und Steve T-S helfen, testen Sie diese mit verschiedenen Geräten. https://twitter.com/TimOliverAU/status/778105029643436033
this class is not key value coding-compliant for the key _feedbackSupportLevel.'
.Derzeit der beste Weg, um überprüfen Sie die Geräte-Modell mit:
Den Plattform-Namen für iPhone 7 und 7 plus:
"iPhone9,1", "iPhone9,3", "iPhone9,2", "iPhone9,4"
Quelle: iOS: bestimmen der aktuellen iPhone/Gerät in Swift?
Können Sie eine Funktion erstellen:
Ich verlängert chrisamanse Antwort. Es extraxts die Nummer der generation aus der Modell-id und prüft, ob es größer oder gleich 9. Sollte funktionieren, mit dem zukünftige iPhone-Modelle, es sei denn, Apple entscheidet sich für die Einführung eines neuen internen Namensschema.
Verwenden Sie es wie so: