如何将iPhone设置为震动一次?

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


当前回答

对于以某种方式关闭振动的设备,我遇到了很大的麻烦,但我们无论如何都需要它工作,因为它对我们的应用程序功能至关重要,而且由于它只是文档方法调用的整数,因此它将通过验证。所以我已经尝试了一些在TUNER88/ iossystemsoundlibrary之外的声音

然后我偶然发现了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 10和更新的iphone上,你也可以使用触觉API。这种触觉反馈比AudioToolbox API更柔和。

对于你的GAME OVER场景,一个重UI影响反馈应该是合适的。

UIImpactFeedbackGenerator(风格:.heavy) .impactOccurred ()

你可以使用其他的触觉反馈方式。

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

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

重要提示:未来弃用警报。 从iOS 9.0开始,API函数描述如下:

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

包括以下说明:

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

正确的方法是使用以下两种:

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate, nil)

or

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

记得导入AVFoundation

摘自“iPhone教程:检查iOS设备功能的更好方法”:

这里有两个看似相似的函数,它们都带有参数kSystemSoundID_Vibrate:

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

这两个功能都能使iPhone震动。但是,当你用第一个 功能在不支持振动的设备上,它会发出哔哔声 声音。另一方面,第二个函数不做任何操作 不受支持的设备。所以如果你要振动这个设备 连续地,作为一个警告,常识说,使用函数2。

首先,在构建阶段中将AudioToolbox框架AudioToolbox.framework添加到目标中。

然后,导入这个头文件:

#import <AudioToolbox/AudioServices.h>

在我的旅行中,我发现如果你在录制音频时尝试以下任何一种方法,即使启用了它,设备也不会振动。

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

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

它是这样的。

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

recorder是一个AVRecorder实例。

希望这能帮助到以前有同样问题的人。