2017-07-25 154 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