2012-04-21 61 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內容屬性。 「主線程」中的 ,這很重要。

如果你這樣做遵循上述建議,屏幕的閃爍問題將被刪除..

可能有人質疑爲什麼在一個線程中呈現的形象,因爲我想這線程是 渲染線程,不能在其他線程以及主線程中渲染。