0

メソッドがオーバーライドされたUIViewサブクラスがあります。drawRect:そこには、何かを描く生成されたコードの長い行があります。

生成されたコードには、パス/ラインのすべての頂点/座標がハードコーディングされているという問題があります。したがって、100x100の正方形を描画するには、0,0から開始し、0,100->100,100->100,0に移動します。UIView boundsプロパティに基づいてこの形状スケールを作成するには、次のようにします。

// This is the size of the drawing. I always know this value beforehand.
CGSize contentSize = SHAPE_XMARK_SIZE;
CGFloat scaleX = self.bounds.size.width / contentSize.width;
CGFloat scaleY = self.bounds.size.height / contentSize.height;

CGContextScaleCTM(context, MIN(scaleX, scaleY), MIN(scaleX, scaleY));

規模に関する限り、すべて良好です。さて、ドローイングの位置も境界線に沿ったものにしたいと思います。drawRect:どういうわけか、メソッドもに基づいて図面を整列させたいと思いboundsます。

私は次のようなことを考えています:

  1. プッシュコンテキストメソッド
  2. コードを描く
  3. ポップコンテキスト
  4. 前のコンテキストを配置

それは正気のアプローチですか?それとも、プッシュアンドポップコンテキストはそのような魔術を達成することができませんか?


1つの簡単なアプローチ:

「何を試しましたか」という質問に答えるために、私が描いたビューを描画boundsサイズと同じサイズで分離して作成し、そのビューを別のビューの中に埋め込んでみました...そしてそれは機能します。ただし、この方法は面倒なので、可能であれば避けたいと思います。

4

1 に答える 1

0

フフト、答えはとてもシンプルでした。私 1、SO 0 だと思います。

CGContextTranslateCTM(context, xOffset, yOffset);

CGContextRefええ、スケール関数が存在していたので、翻訳する素晴らしい関数が存在するはずであるという事実をどういうわけか見落としていました。

残りはすべて、垂直方向と水平方向の位置合わせを実現するための簡単な計算です。

于 2012-08-22T13:45:32.943 に答える