Wie kann das iPhone so eingestellt werden, dass es einmal vibriert?
Wenn ein Spieler beispielsweise ein Leben verliert oder das Spiel beendet ist, sollte das iPhone vibrieren.
ios
cocoa-touch
avfoundation
vibration
System
quelle
quelle
Antworten:
Aus " iPhone Tutorial: Besserer Weg, um die Funktionen von iOS-Geräten zu überprüfen ":
Es gibt zwei scheinbar ähnliche Funktionen, die einen Parameter annehmen
kSystemSoundID_Vibrate
:Fügen Sie zunächst das AudioToolbox-Framework
AudioToolbox.framework
in Build-Phasen zu Ihrem Ziel hinzu.Importieren Sie dann diese Header-Datei:
quelle
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(mindestens ab Beta 2)Swift 2.0+
AudioToolbox präsentiert das jetzt
kSystemSoundID_Vibrate
alsSystemSoundID
Typ, daher lautet der Code:Anstatt den zusätzlichen Besetzungsschritt durchlaufen zu müssen
(Requisiten an @Dov)
Ursprüngliche Antwort (Swift 1.x)
Und so machen Sie es auf Swift (falls Sie auf die gleichen Probleme stoßen wie ich)
Verknüpfen gegen
AudioToolbox.framework
(Gehen Sie zu Ihrem Projekt, wählen Sie Ihr Ziel aus, erstellen Sie Phasen, verknüpfen Sie Binärdateien mit Bibliotheken und fügen Sie dort die Bibliothek hinzu.)Sobald dies abgeschlossen ist:
Das kitschige Ding ist, dass
SystemSoundID
im Grunde eintypealias
(schickes schnellestypedef
) für einUInt32
, und daskSystemSoundID_Vibrate
ist ein reguläresInt
. Der Compiler gibt Ihnen einen Fehler beim Versuch, vonInt
zuUInt32
konvertieren, aber der Fehler lautet "Kann nicht in SystemSoundID konvertiert werden", was verwirrend ist. Warum hat Apple es nicht einfach zu einer schnellen Aufzählung gemacht?@ aponomarenko geht auf die Details ein, meine Antwort ist nur für die Swifters da draußen.
quelle
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
und es wurde gut kompiliertEin einfacher Weg, dies zu tun, ist mit Audio Services:
quelle
Ich hatte große Probleme damit bei Geräten, bei denen die Vibration auf irgendeine Weise ausgeschaltet war, aber wir brauchten sie, um unabhängig davon zu funktionieren, da dies für die Funktionsweise unserer Anwendung von entscheidender Bedeutung ist und nur eine Ganzzahl für einen dokumentierten Methodenaufruf ist Validierung. Deshalb habe ich einige Sounds ausprobiert, die außerhalb der gut dokumentierten hier lagen : TUNER88 / iOSSystemSoundsLibrary
Ich bin dann auf 1352 gestoßen, das unabhängig vom lautlosen Schalter oder den Einstellungen am Gerät funktioniert
(Settings->vibrate on ring, vibrate on silent)
.quelle
enthält den folgenden Hinweis:
oder
quelle
Verwenden Sie für ein iPhone 7/7 Plus oder neuer diese drei haptischen Feedback-APIs.
Verfügbare APIs
Für Benachrichtigungen:
Verfügbare Stile sind
.error
,.success
und.warning
. Jeder hat sein eigenes unverwechselbares Gefühl.Aus den Dokumenten :
Für einfache Vibrationen:
Verfügbare Stile sind
.heavy
,.medium
und.light
. Dies sind einfache Schwingungen mit unterschiedlichem Grad an "Härte".Aus den Dokumenten :
Für den Fall, dass der Benutzer ein Element ausgewählt hat
Dies ist die am wenigsten wahrnehmbare Haptik und daher am besten geeignet, wenn die Haptik die App-Erfahrung nicht übernehmen sollte.
Aus den Dokumenten :
Anmerkungen
Bei der Verwendung dieser APIs sind einige Dinge zu beachten.
Kein Tee
Sie erstellen die Haptik nicht wirklich. Sie fordern das System auf , eine Haptik zu generieren. Das System entscheidet auf der Grundlage der folgenden Punkte:
Daher ignoriert das System Ihre Anfrage nach einer Haptik stillschweigend, wenn dies nicht möglich ist. Wenn dies auf ein nicht unterstütztes Gerät zurückzuführen ist, können Sie Folgendes versuchen:
Ersetzen Sie die Kommentare in der
switch
-case
-Anweisungen, und dieser haptische Generierungscode kann auf andere iOS-Geräte übertragen werden. Es wird das höchstmögliche Maß an Haptik erzeugt.Anmerkung B.
prepare()
Methode, um sie in einen Bereitschaftszustand zu versetzen. Verwenden Ihres Game Over-Beispiels: Möglicherweise wissen Sie, dass das Spiel kurz vor dem Ende steht, wenn der Benutzer sehr niedrige HP hat oder ein gefährliches Monster in der Nähe ist.In diesem Fall würde die Vorbereitung der Taptic Engine zu einer besseren und reaktionsschnelleren Erfahrung führen.
Angenommen, Ihre App verwendet einen Pan-Gesten-Erkenner, um den sichtbaren Teil der Welt zu ändern. Sie möchten, dass eine Haptik generiert wird, wenn der Benutzer sich um 360 Grad "umschaut". Hier ist, wie Sie verwenden könnten
prepare()
:quelle
import UIKit
!haptic
innerhalb dieser Methode keine neue Instanz erstellen . Sie rufen nichtimpactOccured
dieselbe Instanz auf, die Sie aufrufenprepare
.Und wenn Sie das Xamarin (Monotouch) Framework verwenden, rufen Sie einfach an
quelle
Auf meinen Reisen habe ich festgestellt, dass das Gerät nicht vibriert, wenn Sie während der Audioaufnahme eine der folgenden Methoden ausprobieren, selbst wenn es aktiviert ist.
Meine Methode wurde zu einem bestimmten Zeitpunkt bei der Messung der Gerätebewegungen aufgerufen. Ich musste die Aufnahme stoppen und dann neu starten, nachdem die Vibration aufgetreten war.
Es sah so aus.
recorder
ist eine AVRecorder-Instanz.Ich hoffe, dies hilft anderen, die zuvor das gleiche Problem hatten.
quelle
In iOS 10 und auf neueren iPhones können Sie auch die haptische API verwenden. Dieses haptische Feedback ist weicher als die AudioToolbox-API.
Für Ihr GAME OVER-Szenario sollte ein starkes Feedback zu den Auswirkungen auf die Benutzeroberfläche geeignet sein.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Sie können auch die anderen haptischen Feedback-Stile verwenden .
quelle
In Swift:
quelle
In meinem Fall habe ich die AVCaptureSession verwendet. AudioToolbox befand sich in der Erstellungsphase des Projekts und wurde importiert, funktionierte aber immer noch nicht. Damit es funktioniert, habe ich die Sitzung vor der Vibration abgebrochen und danach fortgesetzt.
quelle
Sie können verwenden
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
für iPhone und einige neuere iPods.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
für iPads.
quelle