NSTrackingArea вызов пользовательского кода
Как я могу вызвать свой собственный метод, когда область, определенная NSTrackingArea, захватывает события мыши? Могу ли я указать свой собственный метод (например, "myMethod") в инициализации NSTrackingArea, как показано ниже?
trackingAreaTop = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0,0,100,100) options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways) owner:myMethod userInfo:nil];
Спасибо!
1 ответ
Могу ли я указать свой собственный метод (например, "myMethod") в инициализации NSTrackingArea, как показано ниже?
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:
или же mouseUp:
метод вместо.