以下のように、NSTrackingArea init で独自のメソッド (「myMethod」など) を指定できますか?
trackingAreaTop = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0,0,100,100) options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways) owner:myMethod userInfo:nil];
いいえ。owner
は、メソッドではなく、要求されたマウス トラッキング、マウス移動、またはカーソル更新メッセージを受け取るオブジェクトであると想定されています。カスタムメソッドを渡してもコンパイルされません。
NSTrackingArea で定義された領域がマウス イベントをキャプチャするときに、独自のメソッドを呼び出すにはどうすればよいですか?
NSTrackingArea
マウスの動きに敏感な領域のみを定義します。それらに対応するには、次のことを行う必要があります。
- メソッドを使用して、トラッキングするビューにトラッキング エリアを追加します
addTrackingArea:
。
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: