CGRect中的矩形的起源
问题描述:
我在我的iPhone应用程序中有一个简单的屏幕,在屏幕底部需要一个320x100的矩形来捕捉触摸。这里是我的代码里面touchesBegan:withEvent
:CGRect中的矩形的起源
for (UITouch *touch in touches) {
CGPoint touchPoint = [touch locationInView:self.view];
NSLog(@"touch @ %f, %f", touchPoint.x, touchPoint.y);
// build a rectangle where we want to capture a URL tap
CGRect rectangle = CGRectMake(0, 480, 320, 100);
NSLog(@"midX, midY = %f, %f", CGRectGetMidX(rectangle), CGRectGetMidY(rectangle));
// check to see if they tapped the URL
if (CGRectContainsPoint(rectangle, touchPoint)) {
NSLog(@"You touched inside the rectangle.");
}
}
下面这段代码不会像预期的那样......从中间点的矩形的日志显示,我的矩形在midX, midY = 160.000000, 530.000000
建造。根据CGPoint文档,起源(0, 480)
是左下角,但这起作用就像是左上角的原点。
当我将我的矩形的原点更改为0,380时,一切按预期工作。今天早上可能我没有喝咖啡,但为什么我看到文档和执行之间的差异?
答
是否起源于左上角或左下角确实取决于坐标系。
在UIKit中,(0,0)位于左上角,y轴向下增长。
在CoreGraphics中,(0,0)位于左下角,y轴向上增长。为了适应CG到UIKit,默认情况下会应用垂直反射,这就是为什么如果您使用-drawRect:
中的CG函数直接绘制图像或字符串,则会使其颠倒。
就你而言,你可以从UIKit API获取点和矩形,所以原点位于左上角。
答
我的文档也会说左下角。但我认为这是文档中的错误。 (据我所知,这是Mac桌面正确的,所以他们可能只是错过了移植过的文档时。)
在iPhone上,原点绝对是左上角
有趣。赞成你并希望其他人在接受之前同意/不同意。谢谢! – Greg 2010-02-01 14:24:21