1

私はNSViewを持っています[self setAcceptsTouchEvents:YES];

カーソルが NSView フレームを離れた後も、このメソッドは呼び出され続けます。新しいジェスチャをクリックするか開始するまで、いつ停止するかわかりません。

-(void)touchesMovedWithEvent:(NSEvent *)theEvent {
    [self doStuffs:theEvent];
}

他の Windows 座標系で表された座標を使用します。

これを防ぐ方法、または座標をビュー座標系に戻す方法はありますか?

4

1 に答える 1

2

NSRespondertouchesMovedWithEventは、ビューで開始され、終了するまで (それが自分のビューにあるか他の場所にあるかに関係なく) タッチ イベントに対して呼び出されます。

イベントの場所は、ウィンドウ座標で表されます。ビューの座標系への変換は簡単です:

- (void)touchesMovedWithEvent:(NSEvent *)event
{
    NSPoint locInWindow;
    NSPoint locInView;

    locInWindow = [event locationInWindow];
    locInView = [self convertPoint:locInWindow fromView:nil];

    NSLog(@"Location in window: %@", NSStringFromPoint(locInWindow));
    NSLog(@"Location in view: %@", NSStringFromPoint(locInView));
}

独自のマルチタッチ ジェスチャで生のタッチを処理したい場合、これは十分な情報ではない可能性があります。[event touchesMatchingPhase:NSTouchPhaseMoved inView:self]normalizedPositionなどを使用する必要がありますdeviceSize( Apple のドキュメントを参照してください)。

于 2013-02-18T22:16:34.080 に答える