2015-09-26 128 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