Курсор странное поведение: сбрасывает по умолчанию - PullRequest
0 голосов
/ 17 февраля 2020

При перемещении мыши по NSView я меняю курсор на руку [[NSCursor pointingHandCursor] set]. Я НЕ сбрасываю нигде в коде курсор на стрелку.

Это работает довольно хорошо, однако, если я медленно двигаю мышь, я иногда вижу, что она возвращается к стрелке. Это нежелательно. Это ошибка в Какао или есть обходной путь?

-(void) mouseMoved:(NSEvent*) event {
  [[NSCursor pointingHandCursor] set];
}

Опять же, я не играю с курсором где-либо еще в коде. У меня нет других представлений, накладывающихся на мой NSView. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Если вы можете использовать чисто прямоугольные angular области, использование addCursorRect:cursor: et c в пределах resetCursorRects - это простой способ сделать это.

В противном случае вы можете использовать NSTrackingAreas с NSTrackingCursorUpdate, установленным в качестве опции, и в cursorUpdate: используйте метод set для курсора, как вы.

Использование set / push / pop et c самостоятельно isn ' t стабильный, потому что он не совместим с другими представлениями, которые устанавливают курсор.

0 голосов
/ 19 февраля 2020

Отвечая на мой собственный вопрос, основанный на предложении @ seth. Это то, что я использовал для установки или отмены курсора. У него нет проблемы, которую я описал выше. Я не использовал mouseEntered или mouseExit.

-(void)setCursor:(NSCursor *)cursor {  // nil to reset to the arrow
    if (cursor == _cursor)
        return;
    _cursor = cursor;
    [self discardCursorRects];
    [self.window invalidateCursorRectsForView:self];  // this is needed in Catalina
    [self resetCursorRects];
}

-(void)resetCursorRects {
    if (_cursor != nil) {
        [self addCursorRect:self.bounds cursor:_cursor];
    }
    [super resetCursorRects];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...