我正在尝试将NSTrackingArea安装到全屏视图中,以便获取鼠标移动事件。
然而,每当我这样做时,我都会收到断言错误。我在网上搜索过,但一直找不到任何线索。
*** Assertion failure in -[_NSFullScreenWindow _setTrackingRect:inside:owner:userData:useTrackingNum:install:], /SourceCache/AppKit/AppKit-1038.25/AppKit.subproj/NSWindow.m:3944
以下是设置跟踪区域的代码(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];
断言发生在调用enterFullScreenMode:withOptions:
之后有人有任何想法吗?这不是我应该采取的方法来在全屏窗口中获取鼠标移动事件吗?
答案 0 :(得分:0)
如果您想在整个视图中跟踪鼠标,我认为更容易实现mouseDown:
,mouseMoved:
和mouseUp:
方法以获取鼠标事件。< / p>
答案 1 :(得分:0)
所以这个问题的答案结果证明是我自己代码中的错误。
初始化NSTrackingArea时,我向所有者传递了错误的对象。通过的正确方法是NSView。经过更正后,所有工作都按预期进行。