如何使 Progressbar(UISlider) 在我的应用程序中动态工作? [复制]

Posted

技术标签:

【中文标题】如何使 Progressbar(UISlider) 在我的应用程序中动态工作? [复制]【英文标题】:How to make the Progressbar(UISlider) work dynamically in my app? [duplicate] 【发布时间】:2011-09-20 07:13:10 【问题描述】:

可能重复:UISlider to control AVAudioPlayer

我正在尝试为 iPhone 开发一个简单的音频播放器应用程序,我需要实现必须根据歌曲(媒体文件)长度运行的进度条。我怎样才能做到这一点?我可以使用带计时器的滑块吗? 任何帮助都提前表示感谢,谢谢。

【问题讨论】:

【参考方案1】:

如果您使用AVPlayer 播放音频,那么您可以使用它的**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];

祝你好运!

【讨论】:

有效,但答案已过时请更新,因为“dispatch_get_current_queue()”自 ios 6 起已弃用【参考方案2】:

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

看看 Stack Overflow 上的这篇文章,它有一个很好的演示:UISlider with ProgressView combined

【讨论】:

【参考方案3】:

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

progressBar.value=myPlayer.currentTime;

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

【讨论】:

currentTime 适用于 AVAudioPlayer,但不适用于 AVPlayer 这就是我说If you use AVAUdioPLayer的原因。我在任何地方都看不到 currentTime 适用于这两种情况。 对@Mike。我看到我在去年被AVPlayer 困住时对此发表了评论。然而,最近对你投反对票的不是我。 Həmdə həmvətənıq eləbir! 实际上我认为我的评论是因为你有myPlayer 而不是myAudioPlayer,由于命名约定,这可能会产生误导。 嗯,我编码的方式是你有 AVPlayer 或 AVAudioPlayer。几乎没有人会同时使用两者来进行声音输出,这会导致您所说的误导。你不觉得尴尬吗?

以上是关于如何使 Progressbar(UISlider) 在我的应用程序中动态工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

首次显示时如何使 UISlider 变粗?

如何自定义 UISlider 以使步骤可见

如何使 ProgressBar 在 LibGDX 中工作?

如何使 UISlider 以指数方式输出漂亮的舍入数字?

如何获得 UISlider 的默认 maximumTrackTintColor

如何让 UISlider 的“轨道”不可见?