簡體   English   中英

Swift 4帶有AVPlayer的UISlider不會滑動

[英]Swift 4 The UISlider with AVPlayer doesn't slide

我正在嘗試使用UISlider控制音頻, print()語句會打印正確的值,並且應用程序不會崩潰,但是當我嘗試抓住它並移動滑塊(拇指色)時, UISlider不會滑動,但是當我嘗試滑動時會稍微移動(如水龍頭)。 當我對第六行發表評論時,滑塊會正確響應(但當然不會發生任何反應)。

var playerItem : AVPlayerItem?
var player : AVPlayer?    
@IBAction func adjustSongProgress(_ sender: UISlider) {
    player?.pause()
    let floatTime = Float(CMTimeGetSeconds(player!.currentTime()))
    sliderProgressOutlet.value = floatTime
    print(floatTime)
    player?.play()
}

iOS滑塊的值介於0到1之間。如果CMTimeGetSeconds返回的值介於0到1之間,則設置不正確。

因此,您必須將時間范圍轉換為滑塊范圍。

例如:您的視頻/音頻長度為120秒,並且您想將滑塊移至30秒。然后您可以使用以下功能計算新值。

OldRange =(OldMax-OldMin)
NewRange = NewMax-NewMin

NewValue =((((OldValue-OldMin)* NewRange)/ OldRange)+ NewMin

oldRange = 120 - 0
newRange = 1 - 0
New value = (30-0)*1/120+0 = 0.25

通過刪除固定它AVPlayer和改變AVPlayerItemAVAudioPlayer ,然后把歌曲網址數據:`

    //DOWNLOADS THE SONG IN THE URL AND PUTS IT IN DATA
    var task: URLSessionTask? = nil

    if let songUrl = songUrl {
        task = URLSession.shared.dataTask(with: songUrl, completionHandler: { data, response, error in
            // SELF.PLAYER IS STRONG PROPERTY
            if let data = data {
                self.playerItem = try? AVAudioPlayer(data: data)
                self.playPause()
                DispatchQueue.main.async {
                    self.sliderProgress()
                }
            }
        })
        task?.resume()`

然后,當我將UISlider IBAction Value Changed連接到ViewController時,將其Value ChangedTouch DownTouch Up Inside

    // TOUCH DOWN
@IBAction func SliderTouchDown(_ sender: UISlider) {
    playerItem?.pause()
}

//TOUCH UP INSIDE
@IBAction func SliderTouchUpInside(_ sender: UISlider) {
    playerItem?.currentTime = TimeInterval(sliderProgressOutlet.value)
    playerItem?.play()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM