我有兩個看法。一個是「父」視圖,其中包含執行繪圖的「子視圖」。我將代碼中的孩子稱爲QuartzView。 QuartzView知道如何繪製一個正方形到它自己的上下文。
問題
當我告訴QuartzView它是self
繪製一個正方形它這樣做符合市場預期。當我使用父視圖來告訴QuartsView在它的self
上繪製一個正方形時,它會在屏幕左下角以大約1/5的預期大小繪製正方形。
問題
我認爲這裏有一些父/子或環境問題,但我不知道它們是什麼。我怎樣才能讓兩個方格在同一個地方以完全相同的尺寸畫出來?
家長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