ios - 音频播放进度作为 Swift 中的 UISlider

标签 ios swift avfoundation avplayer

我看过一些关于在 Objective-C 中完成此操作的帖子,但我一直无法通过 Swift 完成同样的操作。

具体来说,我不知道如何在下面实现 addPeriodicTimeObserverForInterval

var player : AVAudioPlayer! = nil

@IBAction func playAudio(sender: AnyObject) {
    playButton.selected = !(playButton.selected)
    if playButton.selected {
        let fileURL = NSURL(string: toPass)
        player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
        player.numberOfLoops = -1 // play indefinitely
        player.prepareToPlay()
        player.delegate = self
        player.play()
        startTime.text = "\(player.currentTime)"
        endTime.text = NSString(format: "%.1f", player.duration)
    } else {
        player.stop()
    }

如有任何帮助,我们将不胜感激。

最佳答案

感谢上面 Dare 的建议,我是这样完成的:

var updater : CADisplayLink! = nil

@IBAction func playAudio(sender: AnyObject) {
    playButton.selected = !(playButton.selected)
    if playButton.selected {
        updater = CADisplayLink(target: self, selector: Selector("trackAudio"))
        updater.frameInterval = 1
        updater.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
        let fileURL = NSURL(string: toPass)
        player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
        player.numberOfLoops = -1 // play indefinitely
        player.prepareToPlay()
        player.delegate = self
        player.play()
        startTime.text = "\(player.currentTime)"
        theProgressBar.minimumValue = 0
        theProgressBar.maximumValue = 100 // Percentage
    } else {
        player.stop()
    }
}

func trackAudio() {
    var normalizedTime = Float(player.currentTime * 100.0 / player.duration)
    theProgressBar.value = normalizedTime
}

@IBAction func cancelClicked(sender: AnyObject) {
    player.stop()
    updater.invalidate()
    dismissViewControllerAnimated(true, completion: nil)

}

关于ios - 音频播放进度作为 Swift 中的 UISlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29542001/

相关文章:

ios - ios - 如何在ios swift中使用自动布局以编程方式将两个标签并排放置在中心和间距?

ios - 使用解码协议(protocol)解析 Json (Codable)

ios - iOS 上的强制设备旋转问题

ios - AVAudioPlayer播放到一定时间后如何调用方法?

macos - 使用 AVFoundation (OSX) 向视频添加过滤器 - 如何将生成的图像写回 AVWriter?

ios - 错误域=AVFoundationErrorDomain 代码=-11821 "Cannot Decode"

ios - Xcode - 使用较旧的 iOS 版本运行模拟器

ios - 使用 Carthage 导入 CocoaLumberjack

ios - Multipeer 连接范围和非 ios 设备

ios - 如何调用 touchesBegan 函数?