如何从非UI线程/函数(iPhone)强制更新UIScrollView的屏幕
我正在从非ui线程/函数在uiscrollview上绘制一组图像。但它只有在所有图像绘制完成后才会显示。为了绘制所有图像,我编写了一个函数,这就是所谓的非ui线程。我确实在函数中写了这一行如何从非UI线程/函数(iPhone)强制更新UIScrollView的屏幕,iphone,nsthread,Iphone,Nsthread,我正在从非ui线程/函数在uiscrollview上绘制一组图像。但它只有在所有图像绘制完成后才会显示。为了绘制所有图像,我编写了一个函数,这就是所谓的非ui线程。我确实在函数中写了这一行 [self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]; 并编写了如下所示的函数 - (void)updateUI { [myScrollView setNeedsDisplay]; }
[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)中执行一些操作,我就能够看到它们中的每一个都被加载。但问题是,我不能对用户说要一直移动屏幕以便查看它。“或者甚至添加到视图层次结构”,这对我来说是关键,谢谢!