Objective c 使用[N事件鼠标定位]时位置错误
我为Mac制作了一个iphone远程鼠标控制器应用程序:iphone应用程序将坐标值发送到Mac,然后Mac处理鼠标位置值 要获取Mac上的当前鼠标位置,接收器调用[NSEvent mouseLocation] x的值总是正确的,但y的值是错误的 我使用了一个“while”循环来处理这个事件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,
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如果两个监视器的分辨率相同,它应该可以正常工作-否则您可能需要额外的数学运算/检查鼠标在哪个监视器上-您必须尝试找出答案。