在iPad应用程序中,我在一个更大的UIView中有一堆UIImageViews。每个UIImageView都包含一个在单独的线程中生成的缩略图(以便不冻结应用程序)。成功生成缩略图后,我在主线程上调用setNeedsDisplay
,然而,当拇指变得可用时,它不会更新UIImageViews(我可以在日志中看到它们),而是需要大约5秒然后显示所有这些都是一次性的。
这是我在单独的线程中创建缩略图时所做的事情:
[self performSelectorOnMainThread:@selector(setNeedsDisplay)
withObject:nil
waitUntilDone:NO];
任何想法?
答案 0 :(得分:0)
问题在于你无法告诉cocoa它必须“现在”重绘。
使用setNeedsDisplay
,您可以单独订购重绘,因为绘图是相当昂贵的过程。
<强> setNeedsDisplay 强>
您可以使用此方法或 setNeedsDisplayInRect:通知 您的视图内容需要的系统 要重新绘制。这种方法制作了一个 请注意并返回 立即。视图实际上并非如此 重绘直到下一个绘图周期, 所有无效的视图 已更新。
Mybe是一个更好,更高效的解决方案,等待所有生成的缩略图?!
答案 1 :(得分:0)
你的主要内容是什么?如果您的应用程序在重绘之前等待所有缩略图都可用,那么听起来好像您可能无意中阻塞了主线程,直到您的缩略图队列清空为止。你是如何设置线程的?
答案 2 :(得分:0)
我会使用NSNotification。在图像准备好时,从线程发送加载图像的通知。您的视图控制器可以观察这些通知并在视图到达时更新视图。