macOS - 按值移动鼠标

问题描述:

我有一个应用程序通过蓝牙从iOS应用程序接收数据,它应该移动鼠标光标。macOS - 按值移动鼠标

问题是我在y轴上有一些奇怪的功能(x很好)。

输入看起来像dx~dy其中dx,dy是移动光标的值。下面是一个例子:

-3.0〜2.0

我的输出的一个例子:

鼠标LOC:(596.0,309.0)新的鼠标LOC:(603.0,311.0)

鼠标LOC:(603.0,489.0)新的鼠标LOC:(610.0,491.0)

鼠标LOC:(610.0,309.0)新的鼠标LOC:(615.0,311.5)

鼠标LOC:(615.0,489.0)新的鼠标LOC:(618.0,491.0)

鼠标LOC:(618.0,309.0)新的鼠标LOC:(618.5,312.5)

正如您首先看到的那样,它的坐标比较低的坐标的坐标低了。所以基本上鼠标保持“上下跳动”。

这里是我的代码来处理输入:

let mouseLoc = NSEvent.mouseLocation() 
let newLoc = CGPoint(x: mouseLoc.x-CGFloat(x), y: mouseLoc.y+CGFloat(y)) 
CGDisplayMoveCursorToPoint(0, newLoc) 

编辑:在测试情况下,我0和2之间有值,所以没有办法有国家100两者之间的差异

可可和核心图形(又名石英)使用不同的坐标系统。在Cocoa中,原点位于主屏幕的左下角,y随着你的增加而增加。在Core Graphics中,原点位于主屏幕的左上角,随着你下降,y增加。

由于您正在使用Core Graphics函数来移动光标,因此您需要从Cocoa的坐标系转换。

var mouseLoc = NSEvent.mouseLocation() 
mouseLoc.y = NSHeight(NSScreen.screens()![0].frame) - mouseLoc.y; 
// etc. 
+0

这会让鼠标移动invers,不是吗?在我的情况下,它上下跳动,我不能沿y轴移动它 – kemkriszt

+0

让我们假设你不添加/减去coords中的任何东西。如果你在我显示的代码后面简单地执行'CGDisplayMoveCursorToPoint(0,CGPoint(x:mouseLoc.x,y:mouseLoc.y))',那么这根本不会移动光标。它不会“反转”它或任何东西。它将其设置到原来的位置。对'mouseLoc.y'的修改不会移动位置,它将它从一个坐标系转换到另一个坐标系。它的确切位置相同,只是在不同的坐标系中用适合您所调用的函数表示。 –

+0

老实说,我不明白:)我知道这种问题与不同的坐标系统。但是,例如,当你做一些2D图形,并且改变c.system时,你的点只会被镜像到屏幕的水平中心,而不会像我的光标那样上下跳动......但无论如何,它都可以工作Thx :) – kemkriszt