CGRect中的矩形的起源

问题描述:

我在我的iPhone应用程序中有一个简单的屏幕,在屏幕底部需要一个320x100的矩形来捕捉触摸。这里是我的代码里面touchesBegan:withEventCGRect中的矩形的起源

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上,原点绝对是左上角

+0

有趣。赞成你并希望其他人在接受之前同意/不同意。谢谢! – Greg 2010-02-01 14:24:21