Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
如何从非UI线程/函数(iPhone)强制更新UIScrollView的屏幕_Iphone_Nsthread - Fatal编程技术网

如何从非UI线程/函数(iPhone)强制更新UIScrollView的屏幕

如何从非UI线程/函数(iPhone)强制更新UIScrollView的屏幕,iphone,nsthread,Iphone,Nsthread,我正在从非ui线程/函数在uiscrollview上绘制一组图像。但它只有在所有图像绘制完成后才会显示。为了绘制所有图像,我编写了一个函数,这就是所谓的非ui线程。我确实在函数中写了这一行 [self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]; 并编写了如下所示的函数 - (void)updateUI { [myScrollView setNeedsDisplay]; }

我正在从非ui线程/函数在uiscrollview上绘制一组图像。但它只有在所有图像绘制完成后才会显示。为了绘制所有图像,我编写了一个函数,这就是所谓的非ui线程。我确实在函数中写了这一行

[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
并编写了如下所示的函数

- (void)updateUI
{
[myScrollView setNeedsDisplay];
}

但即使我看到控件被传递给该函数,它也没有效果。现在该怎么办?

根据我的经验,所有绘图操作都必须在UI线程上执行,即使它们不可见,甚至在执行时添加到视图层次结构中。
不过,如果您能找到一种我很想知道的解决方法:-)

也许您还应该调用
setNeedsLayout
和/或
layoutifneed

试试类似于
performSelectorOnMainThread:withObject:waitUntilDone:
好的,我找到了一个解决方案。虽然我不喜欢这个解决方案,但它工作得很好。我这样改变了我的功能

- (void)updateUI
{
 for(UIView *subview in [myScrollView subviews]) 
 {
  [myScrollView bringSubviewToFront:subview];   
 } 
}

另一件事是,如果我只是在主线程(即scrollview)中执行一些操作,我就能够看到它们中的每一个都被加载。但问题是,我不能对用户说要一直移动屏幕以便查看它。“或者甚至添加到视图层次结构”,这对我来说是关键,谢谢!