4

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 になります。

マウス ポインターは連続的に上下し、2 つの異なる y 値の合計は常に 900 です (画面の解像度が 1440 * 900 であるためだと思います)。

なぜそれが起こるのか、何をすべきか、そしてそれをデバッグする方法がわかりません。

4

4 に答える 4

4

適切な 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;

次に、画面の高さを取得し、そこから mouseLocation の Y 座標を減算します。これは、mouseLocation が下/左から座標を返すためです。これにより、上からの Y 座標が得られます。

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

これは、マウスの位置を制御するアプリで機能しています。

于 2012-04-12T07:27:54.807 に答える
2

コードを詳しく表示せずに変更される理由はわかりませんがmouseLoc = [NSEvent mouseLocation];、原点が画面の上部ではなく左下にあるポイントを返すという事実と関係がある可能性があります。通常の場所に残しました。

于 2011-12-15T23:35:24.363 に答える
1

正しい位置コードを取得する:

CGPoint mousePoint = CGPointMake([NSEvent mouseLocation].x, [NSScreen mainScreen].frame.size.height - [NSEvent mouseLocation].y);
于 2013-01-25T18:36:24.853 に答える