UIScrollView 动画滞后

Posted

技术标签:

【中文标题】UIScrollView 动画滞后【英文标题】:UIScrollView animation laggy 【发布时间】:2010-07-21 11:39:33 【问题描述】:

我正在为 iPad 编写一个阅读器,它在 UIScrollView 中显示图像(最大 1024x1322)

每张图片在需要时(在滚动期间)加载到后台线程中(总是最多加载 3 张图片)。

我的问题是:加载数据时,我正在更新 UIImageView,在我的后台线程中是这样的:

image= [[UIImage alloc] initWithContentsOfFile: file];
[content setImage:image]

似乎“锁定”了主线程,使 UISCrollView 动画一点也不流畅。

提前感谢您提供任何线索

【问题讨论】:

您解决了吗?在图像密集型应用程序中缓存磁盘上的图像时,我遇到了类似的问题。还是不知道有什么好的解决办法。 ***.com/questions/3756863/… 而且你不应该在主线程以外的线程中访问 UIKit - developer.apple.com/library/ios/#documentation/uikit/reference/… - “UIKit 类只能从应用程序的主线程中使用” 【参考方案1】:

您应该从不从后台线程设置图像视图的图像(或任何 UI 组件的任何属性)。 UIKit 不是线程安全的。您需要使用 GCD 或 performSelectorOnMainThread:withObject:waitUntilDone: 将图像传递给主线程。

【讨论】:

【参考方案2】:

在你的后台线程中做这样的事情,而不是使用 UIImage

CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename("file.png"); 
CGImageRef image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, NO, kCGRenderingIntentDefault);

将图像引用传回主线程,然后使用 [UIImage imageWithCGImage:image] 创建 UIImage

希望对你有帮助

【讨论】:

以上是关于UIScrollView 动画滞后的主要内容,如果未能解决你的问题,请参考以下文章

调整容器 uiscrollview 中所有 uiscrollview 的大小

向 UIScrollview 添加/删除 UIView 时的滞后来源?

键盘出现时 UIScrollView “滞后”

添加第三个 UICollectionView 后 UIScrollView 明显的滚动滞后

使用带有动态渲染项目的 UIScrollView 消除滚动滞后

何时使用 UITouch 与 UIScroll