Objective c 使用[N事件鼠标定位]时位置错误

Objective c 使用[N事件鼠标定位]时位置错误,objective-c,ios,nsevent,Objective C,Ios,Nsevent,我为Mac制作了一个iphone远程鼠标控制器应用程序:iphone应用程序将坐标值发送到Mac,然后Mac处理鼠标位置值 要获取Mac上的当前鼠标位置,接收器调用[NSEvent mouseLocation] x的值总是正确的,但y的值是错误的 我使用了一个“while”循环来处理这个事件 while (1) { mouseLoc = [NSEvent mouseLocation]; while ((msgLength = recv(clientSocket, buffer,

我为Mac制作了一个iphone远程鼠标控制器应用程序:iphone应用程序将坐标值发送到Mac,然后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。)


我不知道它为什么会发生,该做什么,以及如何调试它。

我不知道它为什么会在没有看到更多代码的情况下发生变化,但很有可能它与以下事实有关:
mouseLoc=[NSEvent mouseLocation]返回原点位于屏幕左下角的点,而不是通常位于左上角的点

以下是获得正确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坐标,因为鼠标定位返回底部/左侧的坐标,这将得到顶部的Y坐标

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

这在我的应用程序中起作用,可以控制鼠标位置。

获取正确的位置代码:

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

据我所知,
mouseLocation
不是一个静态方法。@David是
NSEvent
的类方法。哦,我还以为不是。对不起@이민규 你有没有想过?我遇到了这个问题。@Nicholaz如果两个监视器的分辨率相同,它应该可以正常工作-否则您可能需要额外的数学运算/检查鼠标在哪个监视器上-您必须尝试找出答案。