在按钮点击时播放来自URL的音频,并在Swift中的滑块或进度条上显示进度,可以通过以下步骤实现:
以下是一个示例代码,演示了如何实现上述功能:
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player: AVPlayer?
var playerItem: AVPlayerItem?
@IBOutlet weak var playButton: UIButton!
@IBOutlet weak var progressSlider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
// 初始化AVPlayer
guard let audioURL = URL(string: "音频的URL") else { return }
playerItem = AVPlayerItem(url: audioURL)
player = AVPlayer(playerItem: playerItem)
// 监听播放进度
player?.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: CMTimeScale(NSEC_PER_SEC)), queue: DispatchQueue.main) { [weak self] time in
guard let duration = self?.playerItem?.duration else { return }
let currentTime = CMTimeGetSeconds(time)
let totalDuration = CMTimeGetSeconds(duration)
let progress = Float(currentTime / totalDuration)
self?.progressSlider.value = progress
}
}
@IBAction func playButtonTapped(_ sender: UIButton) {
if player?.rate == 0 {
// 播放音频
player?.play()
playButton.setTitle("暂停", for: .normal)
} else {
// 暂停音频
player?.pause()
playButton.setTitle("播放", for: .normal)
}
}
@IBAction func progressSliderValueChanged(_ sender: UISlider) {
guard let duration = playerItem?.duration else { return }
let totalDuration = CMTimeGetSeconds(duration)
let currentTime = Double(sender.value) * totalDuration
let time = CMTime(seconds: currentTime, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
player?.seek(to: time)
}
}
在上述示例代码中,需要将"音频的URL"替换为实际的音频文件的URL。同时,需要在界面上添加一个按钮和一个滑块,并将其与对应的IBOutlet和IBAction连接。
推荐的腾讯云相关产品:腾讯云音视频解决方案。该解决方案提供了丰富的音视频处理能力,包括音频播放、音频处理、音频转码等功能,适用于各种音视频应用场景。详情请参考腾讯云音视频解决方案的产品介绍:腾讯云音视频解决方案。
领取专属 10元无门槛券
手把手带您无忧上云