如何使进度条(UISlider)在我的应用程序中dynamic工作?

可能重复:
UISlider来控制AVAudioPlayer

我正在尝试为iPhone开发一个简单的audio播放器应用程序,我需要实现必须根据歌曲(mediafile)长度运行的进度条。我可以如何实现这一点?我可以使用滑块与计时器? 任何帮助预先感谢,谢谢。

如果您使用AVPlayer播放audio,则可以使用其**addPeriodicTimeObserverForInterval**:方法更新您的UISlider。 例如,如果滑块的名称是playerScrubber

  AVPlayerItem *newPlayerItem = [[AVPlayerItem alloc] initWithAsset:<your asset>]; AVPlayer* player = [[AVPlayer alloc] initWithPlayerItem:newPlayerItem]; CMTime interval = CMTimeMake(33, 1000); // 30fps id playbackObserver = [player addPeriodicTimeObserverForInterval:interval queue:dispatch_get_current_queue() usingBlock: ^(CMTime time) { CMTime endTime = CMTimeConvertScale (player.currentItem.asset.duration, player.currentTime.timescale, kCMTimeRoundingMethod_RoundHalfAwayFromZero); if (CMTimeCompare(endTime, kCMTimeZero) != 0) { double normalizedTime = (double) player.currentTime.value / (double) endTime.value; playerScrubber.value = normalizedTime; } }]; 

后来当你完成了:

 [player removeTimeObserver:playbackObserver]; 

祝你好运!

我会说是的,UISlider是你最好的朋友。 这也是iPod使用的。 您将不得不修改ta位以直观地指示进度。 制作一个计时器,轮询您的播放位置并相应地更新滑块的值。 您可以使滑块的最小值为0,最大值为以秒为单位的播放时间。

看看这个post在这里堆栈溢出,它有一个很好的演示: 与ProgressView相结合的UISlider

如果您使用AVAudioPlayer,那么它有一个名为currentTime的属性。 您可以将其值分配给UIProgressBar值,如下所示:

 progressBar.value=myPlayer.currentTime; 

您需要设置一个计时器来不断更新进度。