2015-05-26 1 views
1

У меня возникла проблема с анимацией UISlider в качестве прогресса воспроизведения MPMusicPlayer. Я видел много сообщений об этом на obj-c и AVAudioPlayer.Swift - прогресс воспроизведения MPMusicPlayer как UISlider

Я попытался это:

func startTimer(){ 
    if timer == nil { 
     timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("update:"), userInfo: nil,repeats: true) 
     timer.fire() 
    } 
} 

func stopTimer(){ 
    timer.invalidate() 

} 


func update(timer: NSTimer){ 
    if myMusicPlayer?.playbackState == MPMusicPlaybackState.Playing{ 
     return 
    } 

    var minute_ = abs(Int((myMusicPlayer!.currentPlaybackTime/60) % 60)) 
    var second_ = abs(Int(myMusicPlayer!.currentPlaybackTime % 60)) 

    var minute = minute_ > 9 ? "\(minute_)" : "0\(minute_)" 
    var second = second_ > 9 ? "\(second_)" : "0\(second_)" 

    progressTimerLabel.text = "\(minute):\(second)" 
    progressBar.value = CFloat(myMusicPlayer!.currentPlaybackTime) 

} 

ProgressBar мой UISlider.

Я вызвал startTimer(), когда я воспроизвожу аудио, но он все еще не анимируется. Что я могу сделать, чтобы оживить UISlider?

+0

делает ваш контроль достигают 'progressBar.value = CFloat (myMusicPlayer .currentPlaybackTime!)' Эту строку? проверьте его, добавив точку останова в оператор return и один в progressBar.value line –

+0

Я пробовал println (myMusicPlayer! .currentPlaybackTime), и он появляется только один раз. Я думаю, что он должен появиться много раз, когда работает таймер. –

+0

не должен возвращаться, если состояние! = 'Игра? –

ответ

0

Обновить код с:

func update(timer: NSTimer){ 
    if myMusicPlayer?.playbackState == MPMusicPlaybackState.Playing{ 
     var minute_ = abs(Int((myMusicPlayer!.currentPlaybackTime/60) % 60)) 
     var second_ = abs(Int(myMusicPlayer!.currentPlaybackTime % 60)) 

     var minute = minute_ > 9 ? "\(minute_)" : "0\(minute_)" 
     var second = second_ > 9 ? "\(second_)" : "0\(second_)" 

     progressTimerLabel.text = "\(minute):\(second)" 
     progressBar.value = CFloat(myMusicPlayer!.currentPlaybackTime) 
    } 
} 

Вы должны обновить прогресс, когда игрок играет