NSTrackingArea не всегда обновляет курсор - PullRequest
0 голосов
/ 22 февраля 2020

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

...