NSTrackingArea con fullscreen finestra / vista
-
19-09-2019 - |
Domanda
Sto cercando di installare un NSTrackingArea in una vista a schermo intero al fine di ottenere il mouse spostato eventi.
Tuttavia, ogni volta che faccio, ottengo un errore di asserzione. Ho cercato sul web, ma non sono stati in grado di trovare qualche indizio.
*** Assertion failure in -[_NSFullScreenWindow _setTrackingRect:inside:owner:userData:useTrackingNum:install:], /SourceCache/AppKit/AppKit-1038.25/AppKit.subproj/NSWindow.m:3944
Ecco il codice che imposta l'area di tracciamento (x = 1024, y = 768):
cocoaWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(0.0, 0.0, x,y)
styleMask: NSTitledWindowMask
backing: NSBackingStoreBuffered
defer:NO];
glView = [[WLMacGLView alloc] initWithFrame:NSMakeRect(0.0, 0.0, x,y) pixelFormat:[WLMacGLView defaultPixelFormat]];
[glView setCocoaController:self];
//add the glView as a subview of the window's content view
[[cocoaWindow contentView] addSubview:glView];
NSRect r = [glView frame];
NSTrackingArea *track = [[NSTrackingArea alloc] initWithRect:r options: NSTrackingMouseMoved | NSTrackingActiveWhenFirstResponder | NSTrackingActiveInKeyWindow
owner:self userInfo:nil];
[glView addTrackingArea:track];
[glView enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];
[glView createContext];
L'affermazione avviene subito dopo la chiamata a enterFullScreenMode: withOptions:
Qualcuno ha qualche idea? Non è questo l'approccio dovrei prendere per ottenere il mouse spostato gli eventi in una finestra a schermo intero?
Soluzione 2
Quindi, la risposta a questa domanda si è rivelata essere un bug nel mio codice.
Quando si inizializza il NSTrackingArea, stavo passando l'oggetto sbagliato immobiliare. La cosa giusta da passare era il NSView. Con questo corretto, tutte le opere come previsto.
Altri suggerimenti
Se si desidera tenere traccia del mouse nella vista intera, credo sia sarà più facile per attuare le mouseDown:
, mouseMoved:
e mouseUp:
metodi al fine di ottenere gli eventi del mouse.