215 votes

Faire de l'iPhone vibre

Comment l'iPhone sera mis à vibrer une fois?

Par exemple, lorsqu'un joueur perd une vie ou le jeu est terminé, l'iPhone devrait vibrer.

389voto

aponomarenko Points 6966

Il y a apparemment deux des fonctions semblables qui prend un paramètre kSystemSoundID_Vibrate:

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

À la fois les fonctions vibreur de l'iPhone. Mais lorsque vous utilisez la fonction première sur les périphériques qui ne prennent pas en charge les vibrations, il joue un bip sonore. La deuxième fonction de l'autre main ne fait rien sur les périphériques non pris en charge. Donc, si vous allez pour faire vibrer l'appareil en continu, comme une alerte, le sens commun dit, l'utilisation de la fonction 2.

Voir aussi "l'iPhone Tutoriel: la Meilleure façon de vérifier les capacités des appareils iOS" de l'article.

Tout d'abord, ajoutez le AudioToolbox cadre (AudioToolbox.cadre) à votre cible dans les Phases de construction.

Puis, en-tête de fichier à importer:

#import <AudioToolbox/AudioServices.h>

42voto

Can Points 3567

Et, voici comment vous le faites sur Swift (dans le cas où vous avez couru dans la même difficulté que j'ai fait)

Lien à l'encontre AudioToolbox.framework (Aller à votre projet, sélectionnez votre cible, les phases de construction, Lien Binaire avec les Bibliothèques, les ajouter à la bibliothèque)

Une fois que c'est terminé:

import AudioToolbox.AudioServices

// Use either of these
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

Le fromage, c'est que SystemSoundID est essentiellement un typealias (fantaisie swift typedef) pour un UInt32, et l' kSystemSoundID_Vibrate est un habitué Int. Le compilateur vous donne une erreur pour essayer de jeter le sort d' Int de UInt32, mais l'erreur se lit comme "Ne peut pas convertir à SystemSoundID", ce qui est source de confusion. Pourquoi ne pas apple vient de rendre un Swift enum est au delà de moi.

@aponomarenko va dans les détails, ma réponse est juste pour le Swifters.

34voto

Felz Points 5989

Une façon simple de le faire est avec des Services Audio:

#import <AudioToolbox/AudioToolbox.h> 
...    
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

26voto

Joel Teply Points 261

J'ai eu beaucoup de mal avec ce pour les appareils qui ont la vibration éteint d'une certaine manière, mais nous avons besoin de travailler indépendamment, car il est essentiel pour notre application de fonctionner, et puisque c'est juste un entier à une méthode documentée appel, il va passer de validation. J'ai donc essayé de certains sons qui étaient à l'extérieur du bien documenté ici: https://github.com/TUNER88/iOSSystemSoundsLibrary

Je suis tombé sur 1352, qui fonctionne quel que soit le mode silencieux ou les paramètres de l'appareil (Paramètres->vibreur, sonnerie, vibreur en mode silencieux).

- (void)vibratePhone;
{
     if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
     {
         AudioServicesPlaySystemSound (1352); //works ALWAYS as of this post
     }
     else
     {
          // Not an iPhone, so doesn't have vibrate
          // play the less annoying tick noise or one of your own
          AudioServicesPlayAlertSound (1105);
     }
}

5voto

Wheelie Points 2365

Et si vous êtes à l'aide de Xamarin (monotouch) cadre, il suffit d'appeler

SystemSound.Vibrate.PlayAlertSound()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: