0

それぞれが画像で満たされたいくつかの円を描いています。ユーザーがパンすると、円を拡大縮小/サイズ変更したいと思います。そこで私は drawRect を何度も呼び出し、ジェスチャが完了するまですべての GCRect を再描画しました - もちろん、アニメーションは非常に途切れ途切れでした。私の場合、UIScrollView は、スクロールしたくないが、ユーザーがパンしている間に円をスケーリングしたくないため、ニーズに適合しません。

この機能を実装するために OpenGL ES を使用する以外に方法はありますか?

4

1 に答える 1

1

これには本当にカスタム描画が必要ですか? drawRect を使用せずに、簡単に画像を円にクリップできます。

それなし-drawRect:

Core Animation を使用すると、レイヤーの角の半径を設定できます。円の中に画像を表示するだけの場合は、画像を正方形のフレームの画像ビューに配置し、画像ビュー レイヤーの角の半径をフレームの幅の半分に設定できます。

ユーザーがドラッグするたびに、画像ビュー レイヤーの境界と角の半径を変更できます。これにより、円が大きく/小さくなったように見えます。

カスタム描画が必要な場合

Core Graphics でのみ実行できるカスタム シャドウやブレンディングを行っている可能性があります。その場合、ユーザーが指をドラッグしている間にスケール変換を適用して画像を引き伸ばし、指が画面から離れたときにのみ再描画することができます。これははるかに安価であり、実装も非常に簡単です。スケール変換 ( CGAffineTransformMakeScale(xScale, yScale);) を作成し、円を含むビューの変換として設定するだけです (これは、各円が独自のビューである場合にのみ機能します)。

注:追加のパフォーマンスが必要な場合は、コーナー半径アプローチを使用する場合でも、同じトリック (ドラッグ中のスケーリングと再描画) を使用できます。

于 2012-07-17T16:17:05.573 に答える