UIPickerView“先发制人”的消息?(UIPickerView “preemptive” m

2019-11-01 01:32发布

我有我的地方是UIPickerView通过得到的计算任务“饿死”的情况; 换句话说,该UIPickerView从不更新 - 因此,从来没有发送消息 - 因为一个非常沉重的计算任务正在发生的事情。 拾取器控制计算方面,所以两人都发挥不错。

我想在一个单独的线程中运行计算的。 好像这将使免费更新选择器。 然而,这将会是一项艰巨的任务,使我的计算多线程能力,所以我想寻找另一种解决方案。

是否有可能为一个拾取器(或其他UI控件),以“抢占”的代码块的执行? 计算是在一个循环; 迭代次数是什么使得它沉重。 如果选择器甚至可以设置一个标志的地方,循环可以打破本身,这将与程序的流程工作。

如果循环可以轮询选择器,这也将正常工作。 但是,我还没有找到一种方法来做到这一点。

想法?

(PS。我昨天张贴了类似的问题,但并没有真正问它正确 - !不知道该问题在当时是什么)

Answer 1:

我想你的标志,如果选择器被移动时,设置一个标志的意思。 如果是这样,你可以做到这一点 - 看看选择器的代表,当他们中的任何或全部被调用,设置一个标志。 如果你的计算是由另一个或多个类完成,然后创建这些类“取消”,该选择器可以设置它,并设置计算结束时的新属性。

在你开始另一种计算你会清除取消标志,那么打完折计算。

你也可以把一个简单的工具栏,你有可能会开始计算,显示进度控制选择器(惯例)以上,并取消它。

编辑:如果该问题是选取器口吃当用户试图操纵它,然后继承UIPicker,拦截触摸事件,并且在选择器被触动,取消所有的计算。 唯一复杂的是,如果用户“旋转”的选择器,你要等待直到它平息,但你不知道要等待多久。 根据最后的触摸消息,你将不得不使用启发式等待didSelectRow:重新启动计算之前或超时。



文章来源: UIPickerView “preemptive” messages?