を問題を描く私は2つの景色を眺めることができます。 1つは "親"ビューで、これは図面を実行する "子"ビューを含んでいます。私はそのコードをQuartzViewと呼んでいます。 QuartzViewは、それ自身のコンテキストに四角形を描く方法を知っています。
問題
私はそれは予想通り、それはそうする四角形を描画しself
だ上でQuartzViewを教えてください。 QuartusViewに親ビューを使用して正方形を描画するように指示すると、self
は、スクリーンの左下隅に四角形を約1/5のサイズで描画します。
質問
私はそこここにいくつかの親/子またはコンテキストの問題だが、私は彼らが何であるかわからないと仮定します。どのようにして2つの正方形を正確に同じ場所に正確に同じサイズで描画することができますか?
ViewController
親
- (void)drawASquare {
// this code draws the "goofy" square that is smaller and off in the bottom left corner
x = qv.frame.size.width/2;
y = qv.frame.size.height/2;
CGPoint center = CGPointMake(x, y);
[qv drawRectWithCenter:center andWidth:50 andHeight:50 andFillColor:[UIColor blueColor]];
}
子供QuartzView
- (void)drawRect:(CGRect)rect
{
self.context = UIGraphicsGetCurrentContext();
UIColor *color = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.5];
// this code draws a square as expected
float w = self.frame.size.width/2;
float h = self.frame.size.height/2;
color = [UIColor blueColor];
CGPoint center = CGPointMake(w, h);
[self drawRectWithCenter:center andWidth:20 andHeight:20 andFillColor:color];
}
- (void)drawRectWithCenter:(CGPoint)center andWidth:(float)w andHeight:(float)h andFillColor:(UIColor *)color
{
CGContextSetFillColorWithColor(self.context, color.CGColor);
CGContextSetRGBStrokeColor(self.context, 0.0, 1.0, 0.0, 1);
CGRect rectangle = CGRectMake(center.x - w/2, center.x - w/2, w, h);
CGContextFillRect(self.context, rectangle);
CGContextStrokeRect(self.context, rectangle);
}
注
- 不透明度は、両方の正方形のために同じである
- ノー顕著な違い
view.contentScaleFactor = [[UIScreen mainScreen] scale];
で「自動サイズ変更サブビューは」から始まる親が描かれたとき、私は、正方形のX/Yの値ということに気付いてい
編集
を助けていないオフ左下は0,0のままですが、通常は0,0が左上になります。
明示的には言及していない点があります。グラフィックスコンテキストを保存して再利用しようとしないでください。 – Caleb
この回答の最初の文は一般的に真実ではありませんが、この質問のために十分に近いです。 'UIGraphicsGetCurrentContext()'が有効な他の有効な場所があります。しかし、OPはこれらの状況を使用していません。 – rmaddy
@rmaddy十分に公正です。負の数の平方根をとることはできないと言っているようなものです。結局のところ、学生はより高度な概念を理解する準備ができていますが、最初は単純にしておくことが最善です。 – user3386109