我有一个从 Internet 下载的照片的图库视图,所以我使用了 Enormego 的 EGOImageView。我注意到,当我在图像进入缓存后向下滚动我的 tableview 时,滚动会滞后。我立即发现,当从硬盘驱动器检索图像时,return [UIImage imageWithContentsOfFile:cachePathForKey(key)];
它正在主线程上工作,所以我将操作添加到 NSOperationQueue。这将延迟减少了一半,但滚动仍然结结巴巴。浏览完代码后,我注意到在success方法中
- (void)imageLoaderDidLoad:(NSNotification*)notification {
if(![[[notification userInfo] objectForKey:@"imageURL"] isEqual:self.imageURL]) return;
UIImage* anImage = [[notification userInfo] objectForKey:@"image"];
self.image = anImage;
[self setNeedsDisplay];
if([self.delegate respondsToSelector:@selector(imageViewLoadedImage:)]) {
[self.delegate imageViewLoadedImage:self];
}
}
评论self.image = anImage;
完全摆脱了滞后(但显然我没有得到图像)。据我所知,如果我想改变 UI,必须在主线程中完成。有没有办法为 EGOImageView 设置图像而不会滞后滚动?
注意:JPG 大约 50kB
谢谢