是否可以在后台线程上更新UI?

时间:2017-03-15 06:03:20

标签: macos cocoa

考虑Sketch(或其他绘图工具)的情况,您可以在其中选择并拖动对象,并出现一个检查器,其中包含有关所选对象的信息。

enter image description here

现在可以轻松实现拖动(只需更新对象的框架),并且可以轻松实现检查器(只需更新元素以显示有关对象的数据 - 使用ReactiveSwift进行此操作。)

更新检查员需要至少50毫秒。我正在进行自动布局计算,因为布局会有所改变。如果我在 mouseDown 上更新检查器,并且我立即开始拖动对象,则拖动会出现明显的延迟。

所以你移动你的鼠标,但是对象保持50分钟,直到检查员更新 - 这只是烦人的。

是否可以更改对象的框架并同时更新检查器?或以某种方式在后台线程上运行自动布局计算?

谢谢!

1 个答案:

答案 0 :(得分:0)

不,您无法在后台线程上更新UI。但是,您可以在主线程上同时更新拖动对象的框架和等效检查器的框架。

如果这个特定的应用程序不能同时更新,那么他们就是如何选择实现它的。可能,他们试图区分拖动和敲击(当您需要区分两种类型的手势时的常见行为),这会导致在识别声像之前出现轻微延迟。 (这很重要,因为你经常不想把水龙头误认为是小锅。)他们可能有很多其他原因这样做。

但如果没有看到他们的实施,很难说。但是如果你不想要的话,你不必在你的应用程序中这样做。