1

NSTrackingArea で定義された領域がマウス イベントをキャプチャするときに、独自のメソッドを呼び出すにはどうすればよいですか? 以下のように、NSTrackingArea init で独自のメソッド (「myMethod」など) を指定できますか?

trackingAreaTop = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0,0,100,100) options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways) owner:myMethod userInfo:nil];

ありがとう!

4

1 に答える 1

1

以下のように、NSTrackingArea init で独自のメソッド (「myMethod」など) を指定できますか?

trackingAreaTop = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0,0,100,100) options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways) owner:myMethod userInfo:nil];

いいえ。ownerは、メソッドではなく、要求されたマウス トラッキング、マウス移動、またはカーソル更新メッセージを受け取るオブジェクトであると想定されています。カスタムメソッドを渡してもコンパイルされません。

NSTrackingArea で定義された領域がマウス イベントをキャプチャするときに、独自のメソッドを呼び出すにはどうすればよいですか?

NSTrackingAreaマウスの動きに敏感な領域のみを定義します。それらに対応するには、次のことを行う必要があります。

  1. メソッドを使用して、トラッキングするビューにトラッキング エリアを追加しますaddTrackingArea:
  2. mouseEntered:オプションで、必要に応じて、mouseMoved:またはmouseExited:メソッドをownerクラスに実装します。

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:frame options:NSTrackingMouseEnteredAndExited owner:self userInfo:nil];
        [self addTrackingArea:trackingArea];
    }

    return self;
}    

- (void)mouseEntered:(NSEvent *)theEvent {
    NSPoint mousePoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    // do what you desire
}

詳細については、トラッキング エリア オブジェクトの使用を参照してください。


余談ですが、マウスの移動イベントではなくマウス クリック イベントに応答する場合は、 を使用する必要はありませんNSTrackingArea。代わりにmouseDown:orメソッドを実装してください。mouseUp:

于 2015-05-18T06:32:28.040 に答える