2012-04-21 1 views
0

私はuiscrollviewでcontentviewを持っていましたが、特定のレベルでズームインまたはズームアウトすると高解像度になります。私はこの目標を持っていますが、高解像度のコンテンツを描く前にスクリーンフラッシュ(ビューの背景や一部のタイル画像でフラッシュ)を行います。スムーズな移行ではありません。私はscrollviewsuite(アップルのデモ)でタイルデモを参照しています。私がした違いは、スレッド内でコンテンツを更新することです。このスレッドでは、コンテンツをタイルuiviewで描画します(実際には、バックグラウンドスレッドでCALayerをペイントしたい)。私は次のように呼びます:コンテンツビューは更新されましたが、最初にuiscrollviewがズームされたときに画面がフラッシュされました

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

私はUIメインスレッドでwaiUntilDone:YESを使用しました。 mythreadがコンテンツを完全に再描画するのを待ちます。しかし、 私はこのような状況に陥りました:スクリーンは、(更新されていない)いくつかのタイルの内容を点滅させ、高解像度のコンテンツを取得します。

私は[self perform: @selector(refreshContent) OnThread:mythread...呼び出しを削除した場合、「refreshContent」を直接、画面には、すぐに画面上のコンテンツのショーを更新し、点滅しない

興味があるし、私を助けたい

誰か、あなたがAppleのscrollviewsuite demo.で_Tilingデモを変更することができます。スレッドを使用して、別の解像度でコンテンツを再描画します。

私が言ったことは、バックグラウンドスレッドでcalayerやuiviewのコンテンツを更新したときに、画面上にコンテンツが表示されずにすぐに表示されるということでした。

答えて

1

私はこの質問の解決策を見つけました。スレッド内のrunloopの終わり([CATranscation flush]が呼び出されない場合があるため、更新画面の進行状況が連続でなく、画面が点滅しないため) が必要ですが、このようなことは:

  1. あなたは(画像は、ネットワークからのWebKitやダウンロードとしてエンジンからレンダリングすることができます)望んでいたとして、スレッド内の画像としてのCALayerの内容を準備します。

  2. スレッドでレンダリングされたイメージを、mainthreadのcalayerのcontentsプロパティに割り当てます。 "メインスレッドで"これは重要です。

あなたは

私はそのスレッドが レンダリングスレッドであると仮定しているため、誰かが疑問なぜ、スレッド内で画像をレンダリングするかもしれませ..画面のフラッシュの問題が削除されます、上記の提案をそれに従うならば他のスレッドやメインスレッドでanytingをレンダリングできません。

関連する問題