我已经为iOS 8定制键盘工作了一段时间,到目前为止一切都很顺利,但我仍然无法理解这种敲击音效。
我搜索了这个问题的高低,尝试了几种方法,包括
其中一些可以在模拟器中工作,但它们都不适用于我的设备。 任何在点击自定义键盘按钮时成功播放声音的人都可以分享一些工作代码吗?如果代码能够尊重声音设置,那就是最好的。
答案 0 :(得分:15)
正如Farzad Nazifi在全新安装后提到的Allow openAcesess
,解决了我的问题。
我建议为playing system keyboard tap sound
Swift和Objective-C所有相同的`我们不需要导入任何自定义声音文件只需播放系统点按声音。
导入AudioToolbox框架:
#import <AudioToolbox/AudioToolbox.h>
AudioServicesPlaySystemSound(1104)
此代码在iOS 8 beta 5中测试,我希望苹果能够修复GM版本中的错误(如果它是一个bug)。
答案 1 :(得分:8)
导入框架:
#import <AudioToolbox/AudioToolbox.h>
并使用:
AudioServicesPlaySystemSound(1104);
答案 2 :(得分:7)
最后我得到了其他SO thread的答案。
- (void)playSound
{
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"caf"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesPlaySystemSound (soundID);
}
我已经实现并验证了此方法适用于iOS8 Beta 2上的模拟器和设备。
答案 3 :(得分:1)
这里的关键是iOS只能播放here所描述的文件类型。 iOS无法播放文件类型.caf
。以下代码应该可以在iOS上正常运行。您可以使用this网站将您的.caf
文件转换为网站上可用且兼容的任何文件。我已经对其进行了测试,.caf
次转化即使没有在任何地方指定也能正常运行。
-(void)buttonPressed:(UIButton *)theButton {
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
AVAudioPlayer *av = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"mp3"]] error:nil];
[av setVolume:1.0];
[av setNumberOfLoops:0];
[av prepareToPlay];
[av play];
}
答案 4 :(得分:1)
播放声音需要OpenAccess,我不知道为什么Apple会像这样做,但它现在就是这样。这也将解决滞后问题,并在尝试播放声音后无法解决问题。
您可以通过在键盘的info.plist中为RequestsOpenAccess Key的值设置YES来获取OpenAccess。
接下来,您应该将AudioToolbox导入项目,然后使用以下代码:
- (void)playSound{
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"caf"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesPlaySystemSound (soundID);
现在安装键盘并将Openaccess添加到键盘中,它应该可以正常工作。
答案 5 :(得分:1)
您可以使用playInputClick()
方法。
夫特:
UIDevice.currentDevice().playInputClick()
目标-C:
[[UIDevice currentDevice] playInputClick];
有关详细信息,请参阅documentation。