为什么我不能让光标在鼠标拖动期间保持不动?一旦我开始拖动,它就会恢复为“箭头”(即使我在启动后将其设置为应用程序委托中的张开手)。
- (void)mouseDown:(NSEvent *)event
{
[[NSCursor closedHandCursor] push];
}
- (void)mouseUp:(NSEvent *)event
{
[NSCursor pop];
}
为什么我不能让光标在鼠标拖动期间保持不动?一旦我开始拖动,它就会恢复为“箭头”(即使我在启动后将其设置为应用程序委托中的张开手)。
- (void)mouseDown:(NSEvent *)event
{
[[NSCursor closedHandCursor] push];
}
- (void)mouseUp:(NSEvent *)event
{
[NSCursor pop];
}
如果您不希望其他视图在拖动时更改光标,您可以在 -mouseDown 中执行:
[[self window] disableCursorRects];
在 -mouseUp 中:
[[self window] enableCursorRects];
[[self window] resetCursorRects];
尝试使用addCursorRect:cursor:
为您的视图设置光标。
覆盖resetCursorRects
您的视图:
- (void)resetCursorRects
{
[super resetCursorRects];
if(drag) {
[self addCursorRect:self.bounds cursor:[NSCursor closedHandCursor]];
}
}
您需要调用invalidateCursorRectsForView:
以强制更新您的光标矩形:
[self.window invalidateCursorRectsForView:self];
但是如果你想在你的视图之外有不同的光标,你可以调用[[NSCursor closedHandCursor] set]
你的mouseDragged:
方法。
我遇到了同样的问题,这是由于在拖动过程中我正在修改子视图的框架,这似乎重置了光标。使用.cursorUpdate
选项添加跟踪区域并在内部重置光标cursorUpdate(with:)
时,它似乎可以正常工作。
class MyViewController: NSViewController {
var cursor: NSCursor?
override func viewDidLoad() {
super.viewDidLoad()
view.addTrackingArea(NSTrackingArea(rect: .zero, options: [.activeInKeyWindow, .inVisibleRect, .cursorUpdate], owner: self))
}
override func mouseDown(with event: NSEvent) {
cursor = NSCursor.closedHand
}
override func cursorUpdate(with event: NSEvent) {
cursor?.set()
}
override func mouseUp(with event: NSEvent) {
cursor = nil
}
}