[英]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
和改變AVPlayerItem
到AVAudioPlayer
,然后把歌曲網址數據:`
//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 Changed
為Touch Down
和Touch 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.