2011-03-02 7 views
1

iOS向けのプログラミングでは、多くのUIViewで構成された複合カスタムビューを使用しています。このコンポジット内のUIViewの中には、影を描くものやカスタムシェーディングのものがあります。 UIRotationGestureRecognizerによって認識された回転時に影とシェーディングを再描画する必要があります。しかし、回転速度は満足できるものではありません。私がsetNeedDisplayをコメントアウトしたとき、回転速度は正常です。しかし、私がsetNeedDisplayを呼び出すと、影と陰影のビューのすべてのdrawRectsのすべてをコメントアウトしても、回転はまだかなり遅れています。カスタムUIviewのフリーローテーションが遅すぎる

物事をスピードアップするための推奨事項はありますか?

私は可能な解決策の1つと考えることができます:回転中にシステムがdrawRectを頻繁に呼び出さないようにしてください。しかし、私はこれを行う方法を知らないし、これが最善の解決策であるかどうかもわかりません。任意の提案が高く評価されました。ありがとう。

答えて

0

setNeedsDisplay:を頻繁に呼び出すと、特にすべてのフレームが常に遅くなります。 setNeedsDisplayはGPUではなくCPU上で動作します。回転およびズーム中にビューを再描画しないでください。アニメーションが終了するまで待ってから、setNeedsDisplay:と呼んで最終的な位置をレンダリングします。

はUIKitのビューは大きなアニメーションを処理する方法の様々なを見てみましょう:

  • MapKitは、ズームインする地図画像スケールとぼやけて見えますが。ズームジェスチャーが停止すると、そのスケールで新しい画像がレンダリングされます。

  • ZoomingPDFサンプルコード(Appleの開発者ドキュメントを参照)は、PDFのズームがリアルタイムではレンダリングされない方法を示していますが、ズーム後には終了する。

希望します。

+0

ご意見ありがとうございます。残念ながら、シャドウとシェーディングは3Dオブジェクトを模倣し、回転中に再描画する必要があります。そうでなければ、それは奇妙に見えます。しかし、マップキットとpdfの例を指摘してくれてありがとう。 – huggie

+0

あなたが達成しようとしている効果に対してUIKitが機能しない可能性があります。 – bentford

+0

あなたはおそらく正しいでしょう。私がやったやり方がそれほど遅かったと思う。私はあなたに正解を与えます。 – huggie