Comment configurer l'iPhone pour qu'il vibre une fois?
Par exemple, lorsqu'un joueur perd une vie ou que le jeu est terminé, l'iPhone doit vibrer.
ios
cocoa-touch
avfoundation
vibration
système
la source
la source
Réponses:
À partir de " Tutoriel iPhone: meilleure façon de vérifier les capacités des appareils iOS ":
Il existe deux fonctions apparemment similaires qui prennent un paramètre
kSystemSoundID_Vibrate
:Tout d'abord, ajoutez le framework AudioToolbox
AudioToolbox.framework
à votre cible dans Build Phases.Ensuite, importez ce fichier d'en-tête:
la source
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(au moins à partir de la bêta 2)Swift 2.0+
AudioToolbox présente maintenant le
kSystemSoundID_Vibrate
comme unSystemSoundID
type, donc le code est:Au lieu d'avoir à passer par l'étape de casting supplémentaire
(Accessoires à @Dov)
Réponse originale (Swift 1.x)
Et voici comment vous le faites sur Swift (au cas où vous auriez rencontré le même problème que moi)
Lier contre
AudioToolbox.framework
(Accédez à votre projet, sélectionnez votre cible, phases de construction, Liez le binaire aux bibliothèques, ajoutez-y la bibliothèque)Une fois cela terminé:
Ce qui
SystemSoundID
est ringard, c'est que c'est fondamentalement untypealias
(fantaisie rapidetypedef
) pour unUInt32
, etkSystemSoundID_Vibrate
c'est un habituéInt
. Le compilateur vous donne une erreur pour essayer de caster deInt
versUInt32
convertir , mais l'erreur se lit comme "Impossible de convertir en SystemSoundID", ce qui est déroutant. Pourquoi Apple n'a-t-il pas simplement fait d'enum Swift est au-delà de moi.@ aponomarenko va dans les détails, ma réponse est juste pour les Swifters là-bas.
la source
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
et cela s'est bien compiléUn moyen simple de le faire est avec les services audio:
la source
J'ai eu de gros problèmes avec cela pour les appareils dont les vibrations étaient désactivées d'une manière ou d'une autre, mais nous en avions besoin pour fonctionner malgré tout, car cela est essentiel au fonctionnement de notre application, et comme il ne s'agit que d'un entier pour un appel de méthode documenté, il passera validation. J'ai donc essayé quelques sons qui étaient en dehors de ceux bien documentés ici: TUNER88 / iOSSystemSoundsLibrary
J'ai ensuite trébuché sur 1352, qui fonctionne indépendamment du commutateur silencieux ou des paramètres de l'appareil
(Settings->vibrate on ring, vibrate on silent)
.la source
comprend la note suivante:
ou
la source
Pour un iPhone 7/7 Plus ou plus récent, utilisez ces trois API de rétroaction Haptic.
API disponibles
Pour les notifications:
Sont styles disponibles
.error
,.success
et.warning
. Chacun a sa propre sensation distinctive.De la documentation :
Pour des vibrations simples:
Sont styles disponibles
.heavy
,.medium
et.light
. Ce sont de simples vibrations avec différents degrés de "dureté".De la documentation :
Pour quand l'utilisateur a sélectionné un élément
C'est le moins perceptible de tous les haptiques, et donc le plus approprié lorsque les haptiques ne devraient pas prendre le contrôle de l'expérience de l'application.
De la documentation :
Remarques
Il y a quelques points à retenir lors de l'utilisation de ces API.
Pas de thé
Vous ne créez pas réellement l'haptique. Vous demandez au système de générer un haptique. Le système décidera en fonction de ce qui suit:
Par conséquent, le système ignorera silencieusement votre demande d'haptique si cela n'est pas possible. Si cela est dû à un périphérique non pris en charge, vous pouvez essayer ceci:
Remplacer les commentaires dans le
switch
-case
instructions , et ce code de génération haptique sera portable sur d'autres appareils iOS. Il générera le plus haut niveau d'haptique possible.Remarque B
prepare()
méthode pour la mettre en état de préparation. Utilisation de votre exemple Game Over: vous savez peut-être que le jeu est sur le point de se terminer, si l'utilisateur a des PV très bas ou qu'un monstre dangereux est près d'eux.Dans ce cas, la préparation du Taptic Engine créerait une expérience de meilleure qualité et plus réactive.
Par exemple, supposons que votre application utilise un identificateur de mouvement panoramique pour modifier la partie du monde visible. Vous souhaitez générer un haptique lorsque l'utilisateur «regarde» à 360 degrés. Voici comment vous pouvez utiliser
prepare()
:la source
import UIKit
!haptic
intérieur de cette méthode. VousimpactOccured
n'appelez pas sur la même instance que vous appelezprepare
.Et si vous utilisez le framework Xamarin (monotouch), appelez simplement
la source
Au cours de mes voyages, j'ai constaté que si vous essayez l'une des options suivantes pendant que vous enregistrez de l'audio, l'appareil ne vibrera pas même s'il est activé.
Ma méthode a été appelée à un moment précis dans la mesure des mouvements des appareils. J'ai dû arrêter l'enregistrement, puis le redémarrer après la vibration.
Cela ressemblait à ça.
recorder
est une instance AVRecorder.J'espère que cela aide d'autres personnes qui ont déjà eu le même problème.
la source
Dans iOS 10 et sur les iPhones plus récents, vous pouvez également utiliser l'API haptique. Cette rétroaction haptique est plus douce que l'API AudioToolbox.
Pour votre scénario GAME OVER, une rétroaction d'impact sur l'interface utilisateur lourde devrait convenir.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Vous pouvez utiliser les autres styles de rétroaction haptique .
la source
Dans Swift:
la source
Dans mon cas, j'utilisais l'AVCaptureSession. AudioToolbox était en phase de construction du projet et il a été importé mais ne fonctionnait toujours pas. Afin de le faire fonctionner, j'ai arrêté la session avant les vibrations et j'ai continué après.
la source
Vous pouvez utiliser
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
pour iPhone et quelques iPods plus récents.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
pour iPad.
la source