【问题标题】:Are there any other iOS system sounds available other than 'tock'?除了“tock”之外,还有其他可用的 iOS 系统声音吗?
【发布时间】:2012-08-28 14:55:44
【问题描述】:

我在我的第一个 iPhone 应用程序上实现了一个替代键盘。我想在按下按钮时播放声音。按下标准键盘时的默认点击声音会很好,但我不知道如何获得那种声音。

在这个答案中,我发现了如何播放“嘟嘟”的声音:

Playing system sound without importing your own

我很容易让它工作,但它是一个非常响亮的声音。我在 Stack Overflow 和 Xcode 帮助中搜索了除“tock”之外的可用 iOS 系统声音,但找不到它们。

我可以使用其他内置声音,甚至是默认键盘声音吗?

【问题讨论】:

  • 如果问题真的如其标题所暗示的那样,我敢于回答“有 AVSystemSoundID_Vibrate”。

标签: ios audio avaudioplayer


【解决方案1】:

试试UIDeviceplayInputClick

[[UIDevice currentDevice] playInputClick];

来自文档:

使用此方法播放标准系统键盘点击以响应用户在自定义输入或键盘附件视图中的点击。仅当用户在“设置”>“声音”中启用了键盘单击,并且仅当输入视图本身已启用且可见时,才会播放单击。

确保在输入视图类中采用UIInputViewAudioFeedback 协议,并按照文档实现enableInputClicksWhenVisible 委托方法以返回YES

编辑 - 有关委托方法的实现,请查看Apple's documentation on custom input views

【讨论】:

  • 谢谢拖把!我有点过头了。我无法让它工作。这是我到目前为止所做的。在我的视图 *.h 文件中,我添加了 粗体文本:'@interface TipMainViewController : UIViewController ' '@property (nonatomic, readonly) BOOL enableInputClicksWhenVisible;'在我看来 *.m 文件中我添加了:'@synthesize enableInputClicksWhenVisible;' '- (BOOL) enableInputClicksWhenVisible { 返回 YES; }' 并在我想要滴答声的地方插入以下内容:'[[UIDevice currentDevice] playInputClick];'我做错了什么?
  • 抱歉,我尝试并尝试使用某种结构来格式化上述内容,但这里的评论系统似乎不允许这样做。 :(
  • 您的实现已接近尾声,但您不应添加任何 @property@synthesize 语句来实现委托。此外,您应该在输入视图上实现协议,而不是视图控制器。查看我在上面的答案中添加的链接。
  • 好的,但我没有单独的键盘输入视图。我正在使用拖到视图控制器的 xib 文件上的 TextField。我隐藏了普通键盘并通过添加到视图控制器的 xib 文件中的按钮来实现键盘。我确实阅读了您在上面的“编辑”字段中链接到的优秀教程。以为我在按照它的指示进行操作,所以我创建了一个名为“KeyboardClick”的单独 UITextField 类。使用 Interface builder 中的 Identity Inspector,我将适用的输入文本字段链接到新的 KeyboardClick 类。 [空间不足:(]
  • 我必须承认我并不完全理解协议和委托。我需要实例化新的 KeybardClick 类吗?我试着这样做,但什么也没发生。加上 xCode 说它是一个未使用的变量。我越来越灰心了。
【解决方案2】:

在大约 2 周前发布此问题之前和之后,我一直在寻找一种方法来让键盘点击声音在我的应用程序中正常工作。我试图实现和理解Apple's documentation on custom input views. 我以多种方式破坏了我的应用程序,试图使其工作并创建了几个测试项目。我试图从网络上的各种其他来源解释如何做到这一点。一切都无济于事。除了最后一个功能,我已经完成了我的应用程序。

我终于在this IPhone Dev SDK form question/post 结尾找到了一个简单的答案。最终答案很简单,可以通过这些简单的步骤在几秒钟内完成。

  1. 将“AudioToolbox.framework”链接到您的项目(单击项目的 Target,选择“Build Phases”并在“Link Binary with Libraries”项下单击 + 按钮并添加框架。

  2. 在要实现点击的类的头文件中添加如下内容:

    #import <AudioToolbox/AudioToolbox.h>
    
  3. 在类的实现文件中添加以下代码行,只要您希望键盘点击声音出现:

    AudioServicesPlaySystemSound(0x450);
    

就是这样!它成功了!哈利路亚!

根据 Paul 在其他论坛中的说法,这有以下缺点:

“键盘按键不受 iOS 用户对键盘声音开/关的偏好影响。”

但是,当我在 iPhone 上调高或调低音量时,或者如果我将 iPhone 静音,键盘点击声音会像预期的那样上下波动或静音。鉴于我发现不可能实现键盘点击“UIInputViewAudioFeedback”作为记录,我很高兴有任何工作。

附:如果有人有一个实际项目的链接,我可以在我的 iPhone 上下载、构建和运行以查看如何正确实施:“UIInputViewAudioFeedback”,我很乐意看看。但到目前为止,我还没有找到任何关于如何使其工作的新手风格说明。

[2012 年 9 月 30 日更新:] 我很高兴地说,我的应用通过这种方法被应用商店接受了。这里是:https://itunes.apple.com/app/fine-tip-tip-calculator/id563429225

...戴尔

【讨论】:

  • 我已经放弃寻找解决方案。感谢您发帖。
  • 这是一个链接,其中包含您可以输入该方法的所有声音代码。 iphonedevwiki.net/index.php/AudioServices
  • @Dale Dietrich 对不起,我跟着你的每一步,但仍然无法播放按钮点击的任何声音
  • 非常适合输入事件,但对于轮子来说听起来很糟糕,比如日期选择器,声音相互重叠,无论如何,谢谢!
  • 真的没有常量可以用来代替0x450吗?!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2015-12-08
  • 2023-02-09
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多