gpt4 book ai didi

ios - 获取 slider 的当前时间并播放歌曲

转载 作者:行者123 更新时间:2023-11-30 12:26:30 25 4
gpt4 key购买 nike

目前我正在 swift 3.0 中开发一个项目,其中我有一个 UISlider 可以跟踪歌曲的进度时间并相应地更新值。因此,随着 ProgressTime 的继续,它会更新其值并且 slider 开始移动,因此一旦 ProgressTime 结束, slider 也会停止。在达到此目的时,我的要求是如果用户将 slider 拖动到特定的随机位置,则从该点播放歌曲。因此,无论用户将 slider 拖动到何处,歌曲都应该播放该特定时间的歌曲。我部分完成的代码如下,我将如何更改函数中的逻辑?

func trackTime() {
let interval = CMTime(value: 1, timescale: 2)
player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { (progressTime) in

let seconds = CMTimeGetSeconds(progressTime)

let secondsString = String(format:"%02d", Int(seconds.truncatingRemainder(dividingBy: 60)))
let minutesString = String(format:"%02d", Int(seconds/60))



//progress bar and end time
if let duration = self.player?.currentItem?.asset.duration {

let durationSeconds = CMTimeGetSeconds(duration)
let endTimeSeconds = String(format:"%02d", Int(durationSeconds/60))
self.progressSlider.value = Float(seconds/durationSeconds)
self.progressSlider.isContinuous = false

let newDuration = durationSeconds - seconds

let endSecondsString = String(format:"%02d", Int(newDuration.truncatingRemainder(dividingBy: 60)))

self.endtime = "\(endTimeSeconds):\(endSecondsString)"

}
self.endTimeLabel.text = self.endtime
self.startTimeLabel.text = "\(minutesString):\(secondsString)"
})
}

一旦我按下播放按钮,它的工作原理如下

@IBAction func playButtonPressed(_ sender: Any) {

if newRowSelected == true{
if(isNewPathSelected){
print("player")
let url:URL = savePath!
playerItem = AVPlayerItem(url: url as URL)
player=AVPlayer(playerItem: playerItem!)
let playerLayer=AVPlayerLayer(player: player!)
playerLayer.frame = CGRect(x: 0, y: 0, width: 10, height: 50) // actually this player layer is not visible
self.view.layer.addSublayer(playerLayer)
isNewPathSelected = false
}

if player?.rate == 0 // this means if its not playing
{
print("Playing")
player!.play()
playButton.setImage(UIImage(named: "pause_button"), for: UIControlState.normal)

trackTime()

} else {
player!.pause()
playButton.setImage(UIImage(named: "play_button"), for: UIControlState.normal)
}
}else{
showAlert()
}

}

最佳答案

试试这个

添加 slider 选择器方法如下:

  self.progressSlider.addTarget(self, action: Selector("touchUp:"), forControlEvents: [UIControlEvents.TouchUpInside])

slider 的选择器方法

func touchUp(sender:AnyObject?) {
var showingTime: : CMTime = CMTimeMakeWithSeconds(slider.value, 1);
player.seek(toTime: showingTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
}

关于ios - 获取 slider 的当前时间并播放歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44131975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com