使用 UIAlert / UIAlertController 发出声音

Posted

技术标签:

【中文标题】使用 UIAlert / UIAlertController 发出声音【英文标题】:Sound with UIAlert / UIAlertController 【发布时间】:2019-01-10 04:21:46 【问题描述】:

您好,我想知道是否可以使用 UIAlert 播放声音?根据以下帖子,这似乎是可能的,但我正在努力将 Obj-C 翻译成 Swift。任何帮助表示赞赏!

ios alert message with sound

【问题讨论】:

【参考方案1】:

这是您可以快速实现它的方法。

如果您关注问题中包含的帖子,首先您需要在viewWillAppear 中执行该操作。

然后创建audioPlayer,它将播放您的声音,如下所示:

var audioPlayer: AVAudioPlayer?

然后从Bundle分配URL

let resourcePath = Bundle.main.resourcePath
let stringURL = resourcePath! + "foo.mp3"
let url = URL.init(fileURLWithPath: stringURL)

然后在您的警报出现之前播放它:

audioPlayer?.play()

现在创建您的警报,例如:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler:  action in
    self.audioPlayer?.stop()
 ))

 audioPlayer?.play()
 self.present(alert, animated: true, completion: nil)

您的完整代码将是:

import UIKit
import AVFoundation

class ViewController: UIViewController 

    var audioPlayer: AVAudioPlayer?

    override func viewDidLoad() 
        super.viewDidLoad()
    

    override func viewWillAppear(_ animated: Bool) 

        let resourcePath = Bundle.main.resourcePath
        let stringURL = resourcePath! + "foo.mp3" //change foo to your file name you have added in project
        let url = URL.init(fileURLWithPath: stringURL)

        audioPlayer = try? AVAudioPlayer.init(contentsOf: url)
        audioPlayer?.numberOfLoops = 1

        let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler:  action in
            self.audioPlayer?.stop()
        ))

        audioPlayer?.play()
        self.present(alert, animated: true, completion: nil)
    

【讨论】:

效果不太好,所以我更改了代码让 url = Bundle.main.url(forResource: "disconnect", withExtension: "wav") self.audioPlayer = try? AVAudioPlayer.init(contentsOf: url!, fileTypeHint: AVFileType.wav.rawValue) self.audioPlayer?.numberOfLoops = 1 现在它工作得很好。感谢您的帮助! 你也没有提供那么多信息。很高兴为您提供帮助.. :) 道歉没有说清楚。出于某种原因,您获取声音文件 URL 的方法不起作用,但也没有使应用程序崩溃……奇怪……

以上是关于使用 UIAlert / UIAlertController 发出声音的主要内容,如果未能解决你的问题,请参考以下文章

定时 UIAlert 每 60 秒触发一次,无论我使用啥延迟

Swift:函数中的 UIAlert - 使用未解析的标识符“存在”

如何为 UIAlert 指定大小

在 UIAlert 视图中显示推送通知文本

尝试使用 Multipeer Connectivity Swift 3 Xcode8 传递 UIALERT 时出现多个错误

UIAlert 上的用户交互