NSTrackingArea 并不总是更新游标



我很难使用NSTrackingArea来更新光标,以显示可以调整自定义可拖动NSView大小的位置。这里有一个例子:

句柄的NSRect

var handleBottomLeft: NSRect {
NSRect(x: self.bounds.origin.x,
y: self.bounds.origin.y,
width: handleMargin + borderWidth,
height: handleMargin + borderWidth)
}

跟踪区域:

var bottomLeftTrackingArea: NSTrackingArea?
override func updateTrackingAreas() {
if let area = bottomLeftTrackingArea {
self.removeTrackingArea(area)
}
bottomLeftTrackingArea = nil
bottomLeftTrackingArea = NSTrackingArea(rect: handleBottomLeft, options: [.activeInKeyWindow, .cursorUpdate], owner: self, userInfo: nil)
addTrackingArea(bottomLeftTrackingArea!)
super.updateTrackingAreas()
}

最后,光标更新:

override func cursorUpdate(with event: NSEvent) {
switch event.trackingArea {
case bottomLeftTrackingArea:
print("pointing hand")
NSCursor.pointingHand.set()
default:
print("arrow")
super.cursorUpdate(with: event)
}
}

光标在进入或离开蓝色框时应该会发生变化,但这种情况只发生在50-75%的时间内。下面是一个光标进入时不发生变化,但离开时发生变化的示例。

https://i.imgur.com/fbqqzGy.mp4

将我的跟踪区域调整为不重叠有助于我解决这个问题。我无法从您的示例代码中判断您是否有这个问题,但我想我会分享一下以防万一!

相关内容

  • 没有找到相关文章

最新更新