NSTrackingArea работает странно - весь вид или ничего ... прямоугольники не соблюдаются - PullRequest
1 голос
/ 09 ноября 2010

В моем методе представления «InitWithFrame» я устанавливаю область отслеживания, для которой я хочу захватывать события входа / выхода мыши.
У меня две проблемы:

  1. БезNSTrackingInVisibleRect события вообще не будут вызываться.
  2. Независимо от того, какой «прямоугольник» я поставил, тот, который охватывает весь кадр вида, или тот, который занимает только небольшую его часть - мышь входит / выходит изсобытия вызываются для всего представления, независимо от того, где находится курсор мыши на представлении.

это то, как я инициализирую область отслеживания:

trackingArea = [[NSTrackingArea alloc] initWithRect:rect
  options: (NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways )
  owner:self userInfo:nil];
[self addTrackingArea:trackingArea];

Любые подсказки, почему этопроисходит?Я хочу, чтобы события входа / выхода мыши вызывались только для небольшой части (нижней части) моего представления.

Ответы [ 2 ]

5 голосов
/ 09 ноября 2010

Ответ Майка Абдуллы объясняет пункт 2.

Вот предположение о том, почему вы вообще не получаете события, когда не используете флаг NSTrackingInVisibleRect:
Возможно, указанная вами переменная rect не входит в систему координат представления. Вы можете использовать следующий код в качестве назначенного инициализатора вашего подкласса NSView для получения mouseEntered: и mouseExited: событий для всей области вашего просмотра:

- (id)initWithFrame:(NSRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        //by using [self bounds] we get our internal origin (0, 0)
        NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options:(NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
        [self addTrackingArea:trackingArea];
        [trackingArea release];
    }
    return self;
}

Документация Apple гласит:

При создании объекта области слежения, Вы указываете прямоугольник (в представлении система координат), ...

3 голосов
/ 09 ноября 2010

Прямо из документов для NSTrackingInVisibleRect:

Объект NSTrackingArea автоматически синхронизируется с изменениями в видимой области представления (visibleRect), а значение, возвращаемое из rect, равноигнорируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...