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 определяет только область, чувствительную к движениям мыши. Чтобы ответить на них, вам необходимо:

  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: или же mouseUp: метод вместо.

Другие вопросы по тегам