Неправильное местоположение с помощью [NSEvent mouseLocation] - PullRequest
4 голосов
/ 20 ноября 2011

Я делаю приложение удаленного контроллера мыши iphone для Mac: приложение iPhone отправляет значения координат на Mac, который затем обрабатывает значение местоположения мыши.

Чтобы получить текущее местоположение мыши на Mac, приемниквызывает [NSEvent mouseLocation].

Значение x всегда корректно, но значение y неверно.

Я использовал цикл while для обработки этого события.

while (1) {
    mouseLoc = [NSEvent mouseLocation];

    while ((msgLength = recv(clientSocket, buffer, sizeof(buffer), 0)) != 0) {
          CGPoint temp;
          temp.x = mouseLoc.x;
          temp.y = mouseLoc.y; // wrong value
          ........

Значение y отличается в каждом периоде цикла.Например, значение y равно 400 в первом цикле, значение y равно 500 в следующем цикле;затем y снова равняется 400 в следующем цикле.

Указатель мыши постоянно поднимается и опускается, а сумма двух разных значений y всегда равна 900. (Я думаю, потому что разрешение экрана составляет 1440 * 900.)

Я не знаю, почему это происходит, что делать и как отлаживать.

Ответы [ 3 ]

3 голосов
/ 12 апреля 2012

Вот способ, которым вы можете получить правильное значение Y:

while (1) {
mouseLoc = [NSEvent mouseLocation];
NSRect screenRect = [[NSScreen mainScreen] frame];
NSInteger height = screenRect.size.height;

while ((msgLength = recv(clientSocket, buffer, sizeof(buffer), 0)) != 0) {
      CGPoint temp;
      temp.x = mouseLoc.x;
      temp.y = height - mouseLoc.y; // wrong value
      ........

По сути, я взял высоту экрана:

NSRect screenRect = [[NSScreen mainScreen] frame];
NSInteger height = screenRect.size.height;

Затем я беру высоту экрана и вычитаю из нее координату Y mouseLocation, потому что mouseLocation возвращает координаты снизу / слева, что дает координату Y сверху.

temp.y = height - mouseLoc.y; // right value

Это работает в моем приложении, которое контролирует положение мыши.

2 голосов
/ 16 декабря 2011

Я не знаю, почему это изменилось бы, не увидев больше вашего кода, но есть большая вероятность, что это как-то связано с тем, что mouseLoc = [NSEvent mouseLocation]; возвращает точку, источник которой находится внизу слева экран, вместо верхнего левого, где это было бы обычно.

1 голос
/ 25 января 2013

Получить правильный код позиции:

CGPoint mousePoint = CGPointMake([NSEvent mouseLocation].x, [NSScreen mainScreen].frame.size.height - [NSEvent mouseLocation].y);
...