2010-02-01 3 views
3

У меня есть простой экран в моем приложении для iPhone, где я хочу прямоугольник 320x100 в нижней части экрана, чтобы захватить прикосновение. Вот мой код внутри touchesBegan:withEvent:Происхождение прямоугольника в CGRectMake

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, все работает по назначению. Может быть, сегодня утром я не так кофе, но почему я вижу это несоответствие между документацией и казнью?

ответ

11

ли происхождение в верхний левый или нижний левый угол действительно зависит от системы координат.

В UIKit (0, 0) находится в верхнем левом углу, а ось y возрастает вниз.

В CoreGraphics (0, 0) находится в нижнем левом углу, а ось y растет вверх. Для размещения CG в UIKit по умолчанию применяется вертикальное отражение, поэтому, если вы рисуете изображение или строку напрямую с помощью функций CG в -drawRect:, вы получите их в обратном порядке.

В вашем случае вы получаете точки и прямоугольники из API UIKit, поэтому начало координат находится в верхнем левом углу.

1

В моей документации тоже говорится о нижнем левом углу. Но я думаю, что это ошибка в документации. (AFAIK, это правильно для рабочего стола Mac, так что они, вероятно, просто пропустили это при переносе над Docs.)

На iPhone, происхождение, безусловно, верхний левый угол

+0

Интересно. Вы проголосовали за вас и хотели бы, чтобы некоторые другие согласились/не согласились, прежде чем принимать. Благодаря! – Greg

Смежные вопросы