uiscrollview 缩放时,内容视图刷新但首先闪烁屏幕

Posted

技术标签:

【中文标题】uiscrollview 缩放时,内容视图刷新但首先闪烁屏幕【英文标题】:Content view refresh but flashed screen first when uiscrollview zoomed 【发布时间】:2012-04-21 13:50:47 【问题描述】:

我在 uiscrollview 中有一个 contentview,我希望在 uiscrollview 放大或缩小特定级别时获得高分辨率。我得到了这个目标,但是在绘制高分辨率内容之前屏幕闪烁(与视图的背景或之前的一些平铺图片一起闪烁)。这不是一个平稳的过渡。我在 scrollviewsuite(一个苹果演示)中提到了平铺演示。我所做的不同之处在于我在一个线程中刷新了内容,在这个线程中我在 tile uiview 中绘制内容(实际上我想在后台线程上绘制一个 CALayer)。我这样称呼它:

[self perform: @selector(refreshContent) OnThread:mythread withObject:nil waitUntilDone:YES]

我在 UI 主线程中使用了waiUntilDone:YES。等待 mythread 完全重绘内容。但 我遇到了这种情况:屏幕闪烁一些磁贴内容(未更新),然后获得高分辨率内容。

如果我删除[self perform: @selector(refreshContent) OnThread:mythread...直接调用“刷新内容”,屏幕不会闪烁,更新内容立即显示在屏幕上,

有兴趣想帮帮我的,可以在苹果scrollviewsuite demo.修改_Tiling demo。使用线程以其他分辨率刷新内容。

我只是说,当在后台线程中更新 calayer 或 uiview 的内容时,内容并没有像我希望的那样立即显示在屏幕上……谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

我找到了解决这个问题的方法。答案是不能直接在线程中更新ui(因为线程中runloop结束时,可能不会调用[CATranscation flush],所以更新画面的进度不连续,画面闪烁), 但如果你愿意,我们可以这样:

    根据需要将 calayer 的内容准备为线程中的图像(图像可以从 webkit 等引擎渲染或从网络下载)。

    将在线程中渲染的图像分配给主线程中 calayer 的内容属性。 “在主线程中”,这很重要。

如果您按照上面的建议进行操作,屏幕的闪烁问题将被消除..

可能有人怀疑为什么要在线程中渲染图像,因为我认为线程是 渲染线程,不能在其他线程和主线程中渲染任何东西。

【讨论】:

以上是关于uiscrollview 缩放时,内容视图刷新但首先闪烁屏幕的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIScrollview 双击 uitbutton 缩放

UIScrollview 中心在放大时翻译。这是一个错误吗?

缩放时调整 UIScrollView 的内容大小

UIScrollview 子视图在缩放后无法识别平移手势

如何跟踪缩放的 UIScrollView?

UIScrollView,滑动,缩放