游标怪异行为:重置为默认值

问题描述 投票:0回答:2

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

效果很好,但是,如果我缓慢移动鼠标,有时会看到它恢复为箭头。这是不需要的。那是可可中的虫子还是可以解决的?

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

同样,我不在代码中的其他任何地方玩光标。我的NSView上没有其他视图。预先感谢!

cocoa caret cursor-position
2个回答
1
投票

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

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

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


0
投票

根据@seth的建议回答我自己的问题。这就是我用来设置或取消设置光标的方法。它没有我上面描述的问题。我没有使用mouseEntered或mouseExit。

-(void)setCursor:(NSCursor *)cursor {  // nil to reset to the arrow
    if (cursor == _cursor)
        return;
    [self discardCursorRects];
    if (cursor != nil)
        [self addCursorRect:self.bounds cursor:cursor];
    _cursor = cursor;
}

-(void)resetCursorRects {
    if (_cursor != nil)
        [self addCursorRect:self.bounds cursor:_cursor];
}
© www.soinside.com 2019 - 2024. All rights reserved.