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

时间:2012-04-21 13:50:48

标签: ios uiscrollview zoom

我在uiscrollview中有一个内容视图,我希望在uiscrollview放大或缩小特定级别时可以高分辨率。我得到了这个目标,但在绘制高分辨率内容之前,屏幕闪光(闪光灯带有视图的背景或之前的某些瓷砖图片)。这不是一个平稳的过渡。我在scrollviewsuite(苹果演示)中引用了平铺演示。我做的不同是我在一个线程中刷新内容,在这个线程中我在tile uiview中绘制内容(实际上我想在后台线程上绘制一个CALayer)。我称之为:

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

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

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

有兴趣并希望帮助我的人,您可以修改苹果scrollviewsuite demo.中的_Tiling演示。使用线程以其他分辨率重新制作内容。

我所说的是,当在后台线程中更新calayer或uiview的内容但内容不会立即显示在屏幕上时,我希望...有谁可以帮助我解决这个问题?

1 个答案:

答案 0 :(得分:1)

我找到了这个问题的解决方案。回答是你无法直接更新线程中的ui(因为当线程中的runloop结束时,[CATranscation flush]可能没有被调用,因此更新屏幕的进度不是连续的并且屏幕闪烁), 但如果你愿意,我们可以这样做:

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

  2. 将线程中呈现的图像分配给mainthread中的calayer的contents属性。 “在主线程中”,这很重要。

  3. 如果你这样做,请遵循上面的建议,屏幕的闪光问题将被删除..

    可能有人怀疑为什么在线程中渲染图像,因为我认为该线程是一个 渲染线程,不能在其他线程和主线程中呈现任何内容。