使iPhone震动

iPhone如何设置振动一次?

例如,当玩家失去生命或游戏结束时,iPhone应该振动。

从“ iPhone教程:更好的方式来检查iOS设备的function ”:

有两个表面上看起来类似的函数需要一个参数kSystemSoundID_Vibrate

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

这两个function振动iPhone。 但是,当您在不支持振动的设备上使用第一个function时,会发出嘟嘟声。 另一方面,第二个function在不支持的设备上不做任何事情。 所以,如果你要持续震动设备,作为一个警报,常识说,使用function2。

首先,在构build阶段将AudioToolbox框架AudioToolbox.framework添加到您的目标。

然后,导入这个头文件:

 #import <AudioToolbox/AudioServices.h> 

一个简单的方法是使用audio服务:

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

Swift 3.0

和2.0一样,没有变化。

Swift 2.0

AudioToolbox现在将kSystemSoundID_VibrateSystemSoundIDtypes,所以代码是:

 import AudioToolbox.AudioServices AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate) 

而不必经过额外的铸造步骤

(道具到@Dov)

原始答案(Swift 1.x)

而且,这里是你如何在Swift上做的(如果你遇到同样的麻烦)

链接到AudioToolbox.framework (转到您的项目,select您的目标,构build阶段,链接二进制与库,在那里添加库)

一旦完成:

 import AudioToolbox.AudioServices // Use either of these AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate)) 

typealiasSystemSoundID基本上是一个UInt32typealias (花式swift typedef ),而kSystemSoundID_Vibrate是一个常规的Int 。 编译器给你一个错误,试图从IntUInt32 ,但错误读作“无法转换为SystemSoundID”,这是混乱。 为什么苹果没有把它变成一个Swift枚举超越了我。

@ aponomarenko的细节,我的答案只是在那里的Swifters。

对于以某种方式closures振动的设备,我遇到了很大的麻烦,但我们需要它的工作,因为它对于我们的应用程序function至关重要,而且由于它只是一个整数forms的logging方法调用,所以它会通过validation。 所以我尝试了一些声音,这些声音在这里是有据可查的: TUNER88 / iOSSystemSoundsLibrary

然后,我偶然发现了1352,无论静音开关还是设备上的设置(Settings->vibrate on ring, vibrate on silent) ,1352都在工作。

 - (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); } } 

重要提示:未来弃用警报。

截至iOS 9.0API函数描述为:

 AudioServicesPlaySystemSound(inSystemSoundID: SystemSoundID) AudioServicesPlayAlertSound(inSystemSoundID: SystemSoundID) 

包括以下说明:

 This function will be deprecated in a future release. Use AudioServicesPlayAlertSoundWithCompletion or AudioServicesPlaySystemSoundWithCompletion instead. 

正确的方法将使用以下任何一个:

 AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate, nil) 

要么

 AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate) { //your callback code when the vibration is done (it may not vibrate in iPod, but this callback will be always called) } 

记得import AVFoundation

如果你使用Xamarin(monotouch)框架,只需打电话

 SystemSound.Vibrate.PlayAlertSound() 

在我的旅行中,我发现如果在录制audio时尝试以下任一操作,即使启用了设备,设备也不会振动。

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

我的方法在设备运动测量的特定时间被调用。 我必须停止录音,然后在震动发生后重新开始录音。

看起来像这样

 -(void)vibrate { [recorder stop]; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); [recorder start]; } 

recorder是一个AVRecorder实例。

希望这能帮助其他曾经有过同样问题的人。

在Swift中:

 import AVFoundation ... AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 

在我的情况下,我正在使用AVCaptureSession。 AudioToolbox在项目的构build阶段,它被导入,但仍然无法正常工作。 为了使它工作,我在振动之前停止了这个工作,然后继续工作。

 #import <AudioToolbox/AudioToolbox.h> ... @property (nonatomic) AVCaptureSession *session; ... - (void)vibratePhone; { [self.session stopRunning]; NSLog(@"vibratePhone %@",@"here"); if([[UIDevice currentDevice].model isEqualToString:@"iPhone"]) { AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); } else { AudioServicesPlayAlertSound (kSystemSoundID_Vibrate); } [self.session startRunning]; } 

您可以使用

1)AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

为iPhone和less数较新的iPod。

2)AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

为iPad。