我正在尝试在我的应用程序中的所有按钮上添加自定义点击声音。我为 UIButton 创建了一个类类别,其中包含以下代码:
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"]];
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
if(audioPlayer == nil){
NSLog(@"%@", [error description]);
} else{
[audioPlayer play];
}
所有这些都在以下位置执行:- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
但据我了解,这里的 ARC(我正在使用)存在一个常见问题。audioPlayer 对象似乎在播放声音之前被释放。我也看过了AudioServicesPlaySystemSound();
。但目前这对我来说别无选择,因为我需要在我的应用程序中使用音量级别控制器,而且我发现没有办法在不离开应用程序的情况下更改系统音量。
我的问题是:有没有办法在 UIButton 类类别中对我的 audioPlayer 对象进行强引用?或者还有其他更好的方法来让它工作吗?