2015-01-15 26 views
1

我是swift和iOS开发人员的新手,但对编程并不陌生。我正在构建一个小型秒表应用程序作为我的第一个演示项目。它是内置iOS8秒表应用程序的一个克隆,有一些小的变化,但大部分完全一样。UILabel文本使用NSTimer进行更新,但不能在触摸/拖动时进行UITableView(gif示例)

我几乎完成了应用程序,我注意到UILabels正在更新的问题。它们完美地工作,但当用户单击并拖动定时器下方的表格视图时,它们不会更新。计时器保持正常运行,但时间不会更新到UILabels。它只有在用户放开UITableView时才会再次更新。

这里是我记录

Time label stops updating while user touch/drags the tableview

有谁知道为什么发生这种情况的例子吗?或者如何防止它?在这里的帖子NSTimer gets disturbed while scrolling the UITableView in iphone看来问题是NSTimer正在主线程上运行,这是所有UI渲染发生的地方。

我想我应该在另一个线程上运行NSTimer。或者也许在另一个线程上的UITableView。我将如何在Swift中将它们作为单独的线程运行?这篇文章NSTimer not working while dragging a UITableView似乎很好地解释了Objective-C。它实际上解释说,并不是NSTimer需要在另一个线程上运行,而是需要将它配置为在所有常见模式下运行。有谁知道这可以在Swift中实现吗?或者如果这是这种情况下的正确答案?

回答

3

(从链接答案)将计时器时,这样的SWIFT代码应该是非常相似的Objective-C代码:

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

将成为

NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)