我正在尝试向 UIButton 添加点击声音以在按下时播放。到目前为止,我已经尝试了两种方法,但没有一种方法能达到我希望的效果。
我尝试过使用简单的 SystemSounds,但它们是一个丑陋的解决方案,因为用户无法(或者说非常有限)控制音量。
我还尝试了以下形式的 AVAudioPlayer(在 ViewController 的 init 方法中调用):
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setDelegate:self]; NSString *filePath = [[NSBundle mainBundle] pathForResource: @"button_pushed" ofType: @"wav"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: filePath]; self.buttonPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil]; [buttonPlayer prepareToPlay]; [buttonPlayer setDelegate: self];
第二种方法似乎比第一种方法好得多。特别是当我用以下语句调用声音时:
if (self.clickPlayer.playing) {
[self.clickPlayer stop];
self.clickPlayer.currentTime = 0;
[self.clickPlayer play];
}
else {
[self.clickPlayer play];
}
以上确保了我在反复按下按钮时得到了非常快速的响应。顺便说一句,快速响应时间在我的应用程序中是必不可少的,不幸的是,这是第二种方法失败的地方。
如果我让应用程序空闲大约 10 秒,加载第一个声音需要一个明显的延迟(然后,它会再次变得快速和响应)。不仅如此,它还会延迟按钮被按下。虽然这个延迟非常小(可能只有几分之一秒),但不幸的是它确实影响了我的应用程序的可用性。就好像声音正在自动释放,每次我有一段时间不使用它时都需要初始化或放入内存。
是否有解决方法可以始终保持声音可用并避免延迟或其他可能简单的方法来实现按钮声音?
更多信息: 1. 我使用 ARC 2. 我不使用 IB 3. 目前,没有实现音频委托方法 4. 从其他应用程序在后台播放音频的能力很重要 5. 发生延迟在 iPhone 5 上;所以,我只能想象在功能较弱的设备上需要多长时间......