メソッドがオーバーライドされた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つの簡単なアプローチ:
「何を試しましたか」という質問に答えるために、私が描いたビューを描画bounds
サイズと同じサイズで分離して作成し、そのビューを別のビューの中に埋め込んでみました...そしてそれは機能します。ただし、この方法は面倒なので、可能であれば避けたいと思います。