Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在任何方法中间重新绘制iPhone的实际屏幕?_Iphone_Objective C_Multithreading - Fatal编程技术网

如何在任何方法中间重新绘制iPhone的实际屏幕?

如何在任何方法中间重新绘制iPhone的实际屏幕?,iphone,objective-c,multithreading,Iphone,Objective C,Multithreading,有一个很长的方法: - (IBAction)buttonProcessDown { ... // indicator started ... // active tab changed ... // any text changed ... // indicator stopped } 如何在此方法中重新绘制iPhone屏幕上所有控件的当前状态(所有更改4次) 非常感谢你的帮助 你没有。您必须将控件返回到事件循环才能进行绘图。您需要做的是安排将来启动的方法来更改

有一个很长的方法:

- (IBAction)buttonProcessDown
{
    ... // indicator started
    ... // active tab changed
    ... // any text changed
    ... // indicator stopped
}
如何在此方法中重新绘制iPhone屏幕上所有控件的当前状态(所有更改4次)


非常感谢你的帮助

你没有。您必须将控件返回到事件循环才能进行绘图。您需要做的是安排将来启动的方法来更改UI。

我会将主方法分为4个单独的方法,并对第一个方法使用
performSelector:afterDelay:
,然后在第二个方法结束时再次进行相同的调用,等等。这样,您的代码将有机会让UI重新绘制自己


不过,最好的解决方案是根本不阻塞主线程(UI),并尽可能使用
performSelectorInBackground

将处理推送到另一个线程上。您不应该在主线程(UI)上执行长时间运行的任务。将这些任务移动到后台线程。但是[outputConsole setText:outputText]引发:尝试从主线程或web线程以外的线程获取web锁。这可能是从辅助线程调用UIKit的结果。现在崩溃了…我通过[self-performSelectorOnMainThread:@selector(updateOutputConsole)with-Object:nil waitUntilDone:NO]成功地解决了这个问题;