【发布时间】:2010-11-22 16:39:39
【问题描述】:
有没有可以高速动态更新 UIImageView 图像的示例?这些图像是在 NSThread 中的 IP 连接上接收的。但是当我执行 imageView.image = newImageRecd; 时它们不会更新;
编辑:所有数据都记录在主线程上
感谢任何帮助/指针。
【问题讨论】:
标签: iphone ios4 uiimageview uiimage
有没有可以高速动态更新 UIImageView 图像的示例?这些图像是在 NSThread 中的 IP 连接上接收的。但是当我执行 imageView.image = newImageRecd; 时它们不会更新;
编辑:所有数据都记录在主线程上
感谢任何帮助/指针。
【问题讨论】:
标签: iphone ios4 uiimageview uiimage
对于 iOS 4 及更高版本,您可以使用 Grand Central Dispatch (GCD) 在后台线程上加载图像。这是一个完整解释此过程的链接:
上面的教程提供了这个代码:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
dispatch_sync(dispatch_get_main_queue(), ^{
[[cell imageView] setImage:image];
[cell setNeedsLayout];
});
});
我自己一直在使用它从远程服务器加载图像,效果很好。
【讨论】:
UI 更新需要在主线程上执行。如果您在不同的线程上运行连接,请使用:
[self performSelectorOnMainThread:@selector(updateImageView:) withObject:newImageRecd waitUntilDone:FALSE];
其中updateImageView: 是用于设置图像视图的图像属性的方法:
-(void)updateImageView:(UIImage *)image
{
[self.imageView setImage:image];
}
【讨论】:
performSelectorInBackground:withObject: 在后台执行图像下载。然后,您可以在下载完成后使用上面的代码更新图像视图。