Как отмечают другие, NSTrackingArea
является хорошим решением, и подходящим местом для установки области отслеживания является NSView.updateTrackingAreas()
. Нет необходимости устанавливать содержащее NSWindow свойство setAcceptsMouseMovedEvents
.
В Swift 3:
class CustomView : NSView {
var trackingArea : NSTrackingArea?
override func updateTrackingAreas() {
if trackingArea != nil {
self.removeTrackingArea(trackingArea!)
}
let options : NSTrackingAreaOptions =
[.mouseEnteredAndExited, .mouseMoved, .activeInKeyWindow]
trackingArea = NSTrackingArea(rect: self.bounds, options: options,
owner: self, userInfo: nil)
self.addTrackingArea(trackingArea!)
}
override func mouseMoved(with event: NSEvent) {
Swift.print("Mouse moved: \(event)")
}
}