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