我正在开发一个网络服务数据处理应用程序,我正在努力让应用程序尽快运行。当执行某个3指平移手势时,我调用一种方法,将更新后的信息发送到服务器,以获取新的一批图像,以更新现有的图像。
所以,让我们说一个阵列中有15个图像,我用2个手指过滤它们,然后如果我想改变它们的某些东西,我可以做3个手指的姿势,然后我得到同样的设置,稍微调整一下(对比度/亮度等)。
我想要的是能够在检索到第一张图像后更新显示图像的imageView,以便让用户了解系列中其余部分的外观。但无论我尝试什么,无论我尝试和实现多少个不同的线程,我都无法在整个下载完成之前更新imageView。批量下载完成后(在单独的线程上处理),imageView将使用新图像进行更新,一切都很棒。
这个过程的第一步是:
if(UIGestureRecognizerStateEnded == [recognize state]){
[self preDownload:windowCounter Level:levelCounter ForPane:tagNumber];// Where this method is what gets the first image, and tries to set it to the imageView
[self downloadAllImagesWithWL:windowCounter Level:levelCounter ForPane:tagNumber]; //And this method goes and gets all the rest of the images
}
这是我的预下载方法:
-(void)preDownload:(int)window Level:(int)level ForPane:(int) pane{
int guidIndex = [[globalGuids objectAtIndex:pane] intValue];
UIImage *img = [DATA_CONNECTION getImageWithSeriesGUID:[guids objectAtIndex:guidIndex] ImageID:counter Window:window Level:level];
if(pane==0){
NSLog(@"0");
[imageView3 setImage:img];
}else if(pane==1){
NSLog(@"1");
[imageView31 setImage:img];
}else if(pane==2){
NSLog(@"2");
[imageView32 setImage:img];
}else if(pane==3){
NSLog(@"3");
[imageView33 setImage:img];
}
}
所以通过将它分成两个不同的方法(此时没有实现任何线程,这些方法在所有之前被调用)我认为在preDownload方法完成之后,imageView会更新,然后控制将继续下载到downloadAllImagesWithWL方法,但似乎并非如此。
我在这里错过了一些简单的东西吗?在第二种方法运行之前,我该怎么做才能更新我的GUI元素?
答案 0 :(得分:0)
设置图像后,图像视图会将自身标记为需要显示。直到下一个运行循环开始时才会显示实际显示。在OS X中,您可以使用-display
立即绘制视图,但我不认为Apple在iOS上创建了一个公共方法来执行此操作。但是,如果下一个方法只是创建后台线程,那么它将快速返回并且显示更新可能会在线程完成之前发生。
答案 1 :(得分:0)
你是对的。但是,在代码到达runloop之前,viewn不会刷新。你可以做两件事:
OR