Мне трудно использовать 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