2012-04-21 57 views
0

我在uiscrollview中有一个内容视图,我希望当uiscrollview放大或缩小特定级别时高度分辨率。我得到了这个目标,但在绘制高分辨率内容之前,屏幕闪光(闪光灯前的视图的背景或一些瓷砖图片)。这只是一个不平稳的过渡。我在scrollviewsuite(苹果演示)中提到了平铺演示。我做的区别是,我刷新线程中的内容,在这个线程中我画瓦片uiview中的内容(其实我想画一个CALayer在后台线程)。我这样称呼它:内容视图刷新但闪过屏幕第一次当uiscrollview放大

[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

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

  1. 准备的CALayer的内容作为线程形象,你想(像可以从引擎进行渲染,例如从网络的WebKit或下载)。

  2. 将线程中呈现的图像指定给mainthread中的calayer内容属性。 “主线程”中的 ,这很重要。

如果你这样做遵循上述建议,屏幕的闪烁问题将被删除..

可能有人质疑为什么在一个线程中呈现的形象,因为我想这线程是 渲染线程,不能在其他线程以及主线程中渲染。