Я немного новичок в Swift. Мой слайдер положения песни работает довольно хорошо. Это гладко. Единственная проблема, которую я обнаружил, заключается в том, что она дает странные результаты, если вы удерживаете ползунок в одном месте слишком долго (намного больше, чем секунда). Если вы сделаете это, вы можете получить очень большое число. Возможно, есть гораздо более простой способ работы со слайдером, чем я делал здесь, но это так близко к работе. Спасибо за помощь !!!
var myMPMusicPlayerController = MPMusicPlayerController.systemMusicPlayer
var notificationCenter = NotificationCenter.default
var sliderInUse: Bool! = false
var positionSliderTimer: Timer!
var songTimer: Timer!
var songDuration: Double!
var positionInSong: Double!
override func viewDidLoad() {
positionSliderTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(PlayerViewController.updatePositionOfSlider), userInfo: nil, repeats: true)
}
// ********** updateSongTimeDisplays() **********
@objc func updateSongTimeDisplays(_ songTime: Double) {
var currentTime: Int
if (self.myMPMusicPlayerController.nowPlayingItem != nil)
{
if self.sliderInUse == true {
currentTime = Int(songTime)
} else {
currentTime = Int(self.myMPMusicPlayerController.currentPlaybackTime)
}
let currentMinutes = currentTime/60
let currentSeconds = currentTime - currentMinutes * 60
songElapsedTime.text = NSString(format: "%02d:%02d", currentMinutes,currentSeconds) as String
let remainingTime = Int(songDuration) - currentTime
let remaningMinutes = remainingTime/60
let remainingSeconds = remainingTime - remaningMinutes * 60
songRemainingTime.text = NSString(format: "%02d:%02d", remaningMinutes,remainingSeconds) as String
} else {
// Reset the time to zero.
songElapsedTime.text = NSString(format: "%02d:%02d", 0,0) as String
}
}
// ********** positionSliderTapped() **********
@IBAction func positionSliderTapped(_ sender: Any) {
self.sliderInUse = true
positionInSong = TimeInterval(positionSlider.value)
updateSongTimeDisplays(positionInSong)
}
// ********** updatePositionOfSlider() **********
@objc func updatePositionOfSlider() {
if sliderInUse == false {
positionSlider.value = Float(self.myMPMusicPlayerController.currentPlaybackTime)
}
}
// ********** positionSliderReleased() **********
@objc func positionSliderReleased() {
self.sliderInUse = false
self.myMPMusicPlayerController.currentPlaybackTime = positionInSong
}
Большие цифры ниже случаются, когда я держу палец в одной позиции после скольжения
13
13
13
13
13
13
13
15
16
18
19
20
22
24
26
27
29
30
31
32
32
32
33
33
33
33
33
33
33
33
33
33
95654513522583
33
33
33
33
33
33
33
33
33
33
33
33
95656282321708
33
33
33
33
33
33
33