iPhone:如何为自定义键盘制作关键点击声?

Geo*_*old 19 iphone audio click

有没有办法以编程方式调用键盘"点击"声音?我的应用程序有一个自定义键盘(由UIButtons构建),我想在用户点击键时提供一些音频反馈.我尝试在Garageband中创建自己的声音,但对我的任何创作都不满意.如果没有标准的方式来调用按键点击,有人能指向我可能有这样一个宝石的声音库吗?

小智 31

有一个非常快速的解决方案来播放默认的键盘声音:

  1. 添加AudioToolbox.framework
  2. 在您希望声音播放的位置添加以下行:

    AudioServicesPlaySystemSound(0x450);


Rya*_*yan 23

从iOS 4.2开始,在UIView的自定义子类上采用UIInputViewAudioFeedback协议.将此视图设为"inputView",然后在适当的时间调用"playInputClick".

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIInputViewAudioFeedback_ProtocolReference/Reference/Reference.html

只为了节省一些人的时间.把它放在你的自定义视图中:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

要进行单击,请执行以下操作:

[[UIDevice currentDevice] playInputClick];
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常好,但它有一个捕获,它只有在键盘可见的情况下才有效...它非常适合用于文本视图和文本字段的附件视图和备用输入视图,但它不是一个解决方案,如果你想随时随地播放声音. (3认同)

小智 13

无需将文件复制到您自己的应用程序中 - 您应该能够直接从UIKit框架获取它:

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
    CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
    CFSTR ("Tock"),CFSTR ("aiff"),NULL);
Run Code Online (Sandbox Code Playgroud)


MrM*_*age 9

这就是我从中得出的aSquared的评论:

NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);
Run Code Online (Sandbox Code Playgroud)

  • iOS 7不再捆绑Tock.aiff. (2认同)

Bre*_*don 8

我发现最简单的方法是从iPhone模拟器中提取Tock.aiff(键盘声音)并将其与您的应用程序打包,然后AudioServicesPlaySystemSound()在适当的时候使用它.在我的机器上,只需在Spotlight中键入Tock.aiff即可调出文件,但如果你必须去寻找它,那就是UIKit.framework的模拟器版本.

  • 请记住,这将忽略用户首选项以禁用键盘声音. (4认同)

Sam*_*all 8

使用0x450作为SystemSoundID适合我(并在正确的音量 - 只是播放内置的Tock.aiff太大声).不知道它是多么便携 - 这是在iPod Touch第三代.

仍然不尊重打开/关闭打勾的偏好.