CGRectMake中矩形的起源

时间:2010-02-01 14:10:58

标签: objective-c iphone

我的iPhone应用程序中有一个简单的屏幕,我希望在屏幕底部有一个320x100的矩形来捕捉触摸。这是我在touchesBegan:withEvent内的代码:

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时,一切都按预期工作。也许我今天早上没有适当的咖啡因,但为什么我看到文档和执行之间的这种差异?

2 个答案:

答案 0 :(得分:12)

原点是在左上角还是左下角实际上取决于坐标系。

在UIKit中,(0,0)位于左上角,y轴位于下方。

在CoreGraphics中,(0,0)位于左下角,y轴向上增长。为了容纳CG到UIKit,默认情况下会应用垂直反射,这就是为什么如果你使用-drawRect:中的CG函数直接绘制图像或字符串,你会让它们倒置。

在您的情况下,您从UIKit API获取点和矩形,因此原点位于左上角。

答案 1 :(得分:1)

我的文档也说左下角。但我认为这是文档中的错误。 (AFAIK,这对于Mac桌面来说是正确的,所以他们可能在移植文档时错过了这个。)

在iPhone上,原点绝对是左上角