如何使进度条(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;
您需要设置一个计时器来不断更新进度。