主线程忙时运行UIActivityIndi​​catorView

Sev*_*yev 5 iphone cocoa-touch uiactivityindicatorview

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

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

编辑:第一代设备上的"冗长"约为2秒.

Ed *_*rty 9

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

[activity startAnimating];
[self performSelector:@selector(lengthyOperation) withObject:nil afterDelay:0];
Run Code Online (Sandbox Code Playgroud)

您不必使用该performSelector方法,只需将某种方法设置为稍后运行,以便活动指示器有可能在您忙碌之前开始制作动画.

  • @Seva在主线程上运行冗长的操作通常是一个坏主意. (2认同)

mar*_*rcc 6

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