0

iTunes でスタンフォード CS193P クラスを経験したことがある人なら誰でも、課題 3 (HelloPoly) からこれを認識できます。なじみのない人のために:

UIView のサブクラスである PolyView のインスタンスである polyView というカスタム ビューがあります。このビューでは、CGContextDrawLinearGradient を使用して、長方形のビュー全体に色のグラデーションをペイントします。次に、CGContextDrawPath を使用して、polyView の境界内でポリゴンをストロークして塗りつぶします。ビュー (およびポリゴン) の中央に nameLabel という名前の UILabel があり、ポリゴンの名前 (三角形、四角形、五角形など) が表示されます。これらはすべて正常に機能し、これらすべてを実行するコードは PolygonView クラスの -(void)drawRect メソッドにあります。

私が問題に遭遇したのは、ユーザーのジェスチャーに応じてビュー内でポリゴンを回転させるという追加の要件です。PolygonView クラス内の touchesBegan() および touchesMoved() イベントに応答して CGAffineTransformRotate() を使用しましたが、これも基本的に機能します。しかし、描画されたポリゴンだけでなく、polyView 全体しか回転できません。戻ってポリゴンのパスを再計算し、各 touchesMoved() イベントに応じてパスを再描画/塗りつぶすことができると確信していますが、それは高価であり、最良の方法ではありません。CGAffineTransformRotate を使用して、グラデーションで塗りつぶされたビューや中央のラベルを回転させずにポリゴンだけを回転させるにはどうすればよいですか?

または、目的の回転角度で背景の polyView の上に配置できるレイヤーにポリゴンを作成する方法はありますか?

ここで初心者に与えることができる助けをありがとう!

デュアン

4

1 に答える 1

0

回転変換を行う直前に CGContextSaveGState(...) を実行してから、ポリゴンを描画し、後で CGContextRestoreGState(...) で描画状態を復元して、後でビュー内の他の描画に影響を与えないようにすることができます。

于 2010-08-28T22:06:46.557 に答える