2017-07-25 157 views
2

我的問題解釋非常複雜,所以我會盡我所能解釋它。如何在滾動時更新定時器上的UITableView

我正在用TableView做一個快速的應用程序。在這個TableView中,我有一些數據存儲在本地(Dictionnary,Arrays,var,...)。 因此,在我的TableView中,我每0.01秒刷新一次數據。然後,當我滾動我的TableView時,此刷新停止,我不想要它。我想要「繼續刷新」。

有人可以解釋我能做到嗎?我在StackOverflow上搜索,最多的答案是:線程。 我理解C語言中的Thread,但在Swift中對我來說很模糊。 如果你有一個在Swift中進行多線程的練習,你可以發佈它!

謝謝你的時間。

P.S:我可以發表一些代碼,但我不認爲這是真的有必要爲我的問題。

編輯:

有定時器的代碼,並更新

override func viewDidLoad() { 
    timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, 
    selector:#selector(ViewController.updateTimer), userInfo: nil, 
    repeats: true) 
} 

func updateTimer() { 
    var j = 0 
    for _ in rows { 
    if (rows[j]["Activ"] as! Bool == true) { 
     rows[j]["timer"] = (rows[j]["timer"] as! Double + 0.01) as AnyObject 
    } 
    j += 1 
    } 
myTableView.reloadData() 
} 
+0

顯示執行定時器並調用刷新的代碼。問題是表更新和滾動都需要在主線程中完成。即使你有另一個線程,它也不會有幫助。 –

+0

@LouFranco謝謝你的回答。我用代碼編輯我的問題! – pierreafranck

+2

每'0.01秒'更新你的UI是沒有意義的,因爲屏幕甚至無法更新。您的更新頻率不應超過1/30秒(30FPS)。 –

回答

2

所以,這是因爲在Timer作品在這同DispatchQueue作爲UITableView滾動。您可以通過使用例如AsyncTimer來解決此問題。

+0

感謝您的答覆哥們。我知道AsyncTimer,但我希望如果可能的話,不要在這個項目中使用pod。 – pierreafranck

+0

然後你可以複製源代碼莢(MIT許可證) –

+0

是的,這是真的。如果我沒有發現任何東西,我會去做;)但是我認爲,本地方法適合我的需要。 – pierreafranck