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

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


当前回答

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

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

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

它是这样的。

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

recorder是一个AVRecorder实例。

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

其他回答

Swift 2。0 +

AudioToolbox现在将kSystemSoundID_Vibrate表示为SystemSoundID类型,因此代码如下:

import AudioToolbox.AudioServices

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)

而不必通过额外的强制转换步骤

(@Dov的道具)

原始答案(Swift 1.x)

下面是你如何在Swift上做这件事(以防你遇到和我一样的麻烦)

链接AudioToolbox.framework(转到你的项目,选择你的目标,构建阶段,链接二进制库,在那里添加库)

一旦完成:

import AudioToolbox.AudioServices

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

SystemSoundID基本上是UInt32的类型别名(花哨的swift typedef),而kSystemSoundID_Vibrate是一个常规Int。编译器给你一个错误,试图从Int转换到UInt32,但错误读为“不能转换为SystemSoundID”,这是令人困惑的。苹果为什么不直接把它做成Swift enum,我真搞不懂。

@aponomarenko详细介绍了,我的答案只是给斯威夫特的。

在iOS 10和更新的iphone上,你也可以使用触觉API。这种触觉反馈比AudioToolbox API更柔和。

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

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

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

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

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

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

它是这样的。

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

recorder是一个AVRecorder实例。

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

你可以使用

1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);

iPhone和一些新款ipod。

2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

ipad。

如果您正在使用Xamarin (monotouch)框架,只需调用

SystemSound.Vibrate.PlayAlertSound()