光标奇怪的行为:重置为默认值
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];
}
在 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];
}