主线程忙时运行UIActivityIndi​​catorView

时间:2010-03-06 04:22:33

标签: iphone cocoa-touch uiactivityindicatorview

有没有办法在主线程执行冗长的操作时显示动画旋转轮?动画由创建UIActivityIndi​​catorView的同一个线程处理,对吧?如果是这样,属于多个线程的视图是否可以位于同一视图层次结构中?

所有其他方法都失败了,我不介意将冗长的操作本身移动到后台线程中,但是当它运行时我必须以某种方式冻结UI。我不知道该怎么做。

编辑:第一代设备上的“冗长”约为2秒。

2 个答案:

答案 0 :(得分:9)

解决方案是在运行冗长的操作之前,通过运行循环至少开始一次迭代动画。例如:

[activity startAnimating];
[self performSelector:@selector(lengthyOperation) withObject:nil afterDelay:0];

您不必使用performSelector方法,只需将某种方法设置为稍后运行 ,这样活动指示器就有机会在您忙碌之前开始制作动画。

答案 1 :(得分:6)

正确的答案肯定是将长度操作移动到后台线程,并在完成后让它与主线程通信。如果您不知道如何执行此操作,请阅读NSOperationQueueNSInvocationOperation。您的应用和您的用户将感谢您学习所需的最短时间。