光标奇怪的行为:重置为默认值

Cursor weird behavior: resets to default

在 NSView 上移动鼠标时,我将光标更改为一只手 [[NSCursor pointingHandCursor] set]。我不会在代码中的任何地方将光标重置为箭头。

效果很好,但是如果我慢慢移动鼠标,我有时会看到它会恢复为箭头。这是不需要的。这是 Cocoa 中的错误还是有变通办法?

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

同样,我不会在代码的其他任何地方使用光标。我的 NSView 上没有其他视图。提前致谢!

如果您可以使用纯矩形区域,在 resetCursorRects 中使用 addCursorRect:cursor: 等是一种简单的方法。

否则,您可以使用 NSTrackingAreas 并将 NSTrackingCursorUpdate 设置为选项,并在 cursorUpdate: 中像您一样在游标上使用 set 方法。

单独使用 set/push/pop 等并不稳定,因为它与设置光标的其他视图不合作。

根据@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];
}