Событие mouseDown в пользовательском представлении не отображает правильные координаты щелчка - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть собственный класс представления, который получает события мыши.Я не получаю правильные координаты событий mouseDown или mouseUp.Независимо от того, где я щелкаю внутри вида, я получаю одни и те же неправильные координаты.

Это функция, которая есть в моем пользовательском классе NSView

- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint coordinateInBaseWindow = theEvent.locationInWindow;

    NSPoint coordinateInView = [self convertPoint:coordinateInBaseWindow fromView:nil];
    NSLog(@"left mouse down (x,y) =(%f,%f)", coordinateInView.x, coordinateInView.y);
}

У меня аналогичный обработчик mouseUp event.

Теперь выходные данные всегда

левая мышь вниз (x, y) = (0.000000, -1.996910)

левая мышь вверх (x,y) = (0.000000,0.000000)

Независимо от того, где я щелкаю внутри вида, координаты левой клавиши мыши всегда (0,000000, -1,996910), а левой клавиши вверх всегда (0,000000,0,000000).).

  1. Что я делаю не так?Почему я не могу получить правильные координаты события щелчка мыши?
  2. mouseDown и mouseUp вместе делают один клик.Разве координаты mouseDown и mouseUp не должны совпадать?Почему они отличаются в этом случае?

Редактировать 1:

Как указано omz , я должен был использовать convertPoint:fromView:но это тоже не решило проблему.Я все еще получаю те же координаты.

Редактировать 2: Мои спецификаторы формата в NSLog были неверны, что давало мне совершенно неверные результаты.

1 Ответ

4 голосов
/ 13 декабря 2011

Чтобы преобразовать из координат окна, вы должны использовать convertPoint:fromView: с nil в качестве параметра просмотра.Ваше обращение делает обратное.

...