2015-09-26 127 views
0

我正在实现一个视频播放器,其中我已经让UISlider跟踪电影的进度。这意味着当电影结束时,滑块的大拇指应该处于最大值。iOS UISlider拇指的移动来跟踪电影的进度

我无法做到这一点。电影在拇指到达之前结束。有谁能帮我理解可能是什么问题?

这是我写的代码:

//I'm setting the min, max values of the UISlider and calculating the current value 
progressBar.minimumValue = 0.0; 
progressBar.maximumValue = (float)movie.duration; 
progressBar.value = ((float)movie.currentPlaybackTime/(float)movie.duration) * progressBar.frame.size.width; 
+0

你为什么与'进度繁殖。 frame.size.width'? – quaertym

+0

当设备旋转到横向时,进度条的宽度会发生变化。电影的持续时间和当前值将是相同的。我们将如何绘制这种情况下的进度,我想我们必须考虑进度条的宽度。请提出什么可能是更好的方法? –

回答

0

它不应该仅仅是:progressBar.value =(浮动)movie.currentPlaybackTime?

我的意思,可以说,电影的持续时间为60秒,和(这是currentplaybacktime,我想),电影是在15秒

这样:

进度最小值是0

进度max为60

进度值应该是0和60之间,并且它是其中膜是在值现在:其15.

编辑: 你还应该使用: - setValue:animated:

另一种想法:也许你不在主线程。请确保你是在主线程时使用户界面的变化

+0

我也试过这个,但它不起作用。你认为它在纵向和横向模式下都能正常工作吗?横向模式下的进度条会更长。 –

+0

查看我的编辑:尝试使用 - setValue:animated:设置值!但是对于progressbar.value,框架的宽度是不相关的。该值介于minvalue和maxvalue之间,如果它是min,则它位于最左侧,如果它是max,则位于最右侧(除非使用阿拉伯语定位,我猜:))。 – Vlk

+0

另一个想法:也许你不在主线上。请确保您在更改用户界面时位于主线程 – Vlk

0

只需使用progressBar.value = (float)movie.currentPlaybackTime;代替progressBar.value = ((float)movie.currentPlaybackTime/(float)movie.duration) * progressBar.frame.size.width;

+0

这是我做的第一件事,但它没有工作 –

0

最大值应等于边框的宽度:

progressBar.minimumValue = 0.0; 
progressBar.maximumValue = progressBar.frame.size.width; 
progressBar.value = ((float)movie.currentPlaybackTime/(float)movie.duration) * progressBar.frame.size.width; 
+0

感谢您的回应。将检查并回复给您。 –

+0

可能的选项之一,但为什么?坚持电影的持续时间(用于最大值)而不是使用可能在设备旋转或任何其他布局改变时改变的控件的宽度是否更容易? –

+0

我认为这是他正在努力实现的;一个滑块,它取得全部宽度并正确显示当前位置。 – quaertym