mouseMoved not called mouseMoved not called xcode xcode

mouseMoved not called


Be sure to request the mouseMoved event is sent:

NSTrackingAreaOptions options = (NSTrackingActiveAlways | NSTrackingInVisibleRect |                           NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self bounds]                                                    options:options                                                      owner:self                                                   userInfo:nil];


As noted by others, an NSTrackingArea is a good solution, and an appropriate place to install the tracking area is NSView.updateTrackingAreas(). It isn't necessary to set the containing NSWindow's setAcceptsMouseMovedEvents property.

In 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)")    }}


I haven't used mouseMoved: in a real project (I've just played around with it a little). As far as I can tell, mouseMoved: is only called when your view is the first responder and then not only while the mouse is over your view, but always when the mouse moves. You might be better off using an NSTrackingArea. Check the Cocoa Event Handling Guide for more information.