2017-01-10 15 views
1

iOSアプリからBluetoothを介してデータを受信し、マウスカーソルを移動させるアプリがあります。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)

あなたが最初に見ることができるように、より低いものより低いy座標を持っています。だから基本的にマウスは "ジャンプ"を上下に保ちます。

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

EDIT:ここ

は、入力処理する私のコードであるので、100 2の間の状態の違いを持っ​​てする方法はありません、私は0と2の間の値を持っていたテストケースでの

答えて

1

CocoaとCore Graphics(別名:Quartz)は、異なる座標系を使用します。ココアでは、原点は主画面の左下にあり、yが上がるにつれて増加します。 Core Graphicsでは、原点は主画面の左上にあり、yは下がるにつれて増加します。

コアグラフィック機能を使用してカーソルを移動しているので、Cocoaの座標系から変換する必要があります。

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

これはマウスを逆転させるでしょうか?私の場合、それは上下にジャンプし、y軸に沿ってそれを動かすことはできません – kemkriszt

+0

座標から何も追加/減算しないとしましょう。私が示したコードの後に​​単に 'CGDisplayMoveCursorToPoint(0、CGPoint(x:mouseLoc.x、y:mouseLoc.y))'を実行すると、カーソルはまったく動かないでしょう。それはそれを "逆"化するものではありません。すでにそれがどこにあるのかを正確に設定しています。 'mouseLoc.y'への変更は位置を移動させず、ある座標系から別の座標系に変換します。これは同じ正確な位置です。呼び出す関数に応じて異なる座標系で表現されます。 –

+0

正直なところ、私は理解できません:)私はこの種の問題をさまざまな座標系で知っています。しかし、たとえば2Dグラフィックスを使用して、あなたがポイントするc.systemを変更すると、画面の水平中央に鏡映され、カーソルのように上下にジャンプすることはありません。しかしとにかく、それはうまくいきますThx :) – kemkriszt

関連する問題