NSView 事件在 child window 几秒后随机停止
NSView events randomly stop after several seconds when having a child window
我有一个主 window 主 NSView 处理它的事件。它工作正常。
但是,一旦我添加了透明 child window,事件将在大约 5 秒后停止随机发送,直到我移动鼠标。例如,如果我滚动,它可以正常工作大约 5 秒,然后根本不会触发 scrollWheel
事件,直到我移动鼠标一点。
(我需要透明 child window 才能在 Metal 视图顶部显示本机元素)。
这是我添加 child window:
的方法
////
CGRect wRect = main_window.frame;
NSView *contentView = main_window.contentView;
CGRect cRect = contentView.frame;
CGRect rect = CGRectMake(wRect.origin.x, wRect.origin.y, cRect.size.width, cRect.size.height);
NSWindow *overlayWindow = [[NSWindow alloc]initWithContentRect:rect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
overlayWindow.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0];
[overlayWindow setOpaque:YES];
child_view = [[MyView2 alloc] init];
overlayWindow.contentView = child_view;
[main_window addChildWindow:overlayWindow ordered:NSWindowAbove];
///////////
[main_window center];
[main_window makeKeyAndOrderFront:nil];
如果我删除 addChildWindow
调用,事件将再次正常运行。
另外很有趣的是,如果我不通过 overlayWindow.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0];
将 child window 的背景设置为透明,则不会向主 window 发送任何事件].
更新
这仅适用于鼠标事件(滚动、单击)。键盘事件工作正常。
更新 2
我注意到所有事件在 mouseExited
事件后立即停止,我必须随机移动光标直到我得到 mouseEntered
事件,然后滚动再次工作。
我通过向主视图添加一个 child 视图来解决这个问题,而不是添加一个全新的 window:
[contentView addSubview:child_view];
我不知道 child window 的问题是什么,可能是透明 child windows.
的错误
我有一个主 window 主 NSView 处理它的事件。它工作正常。
但是,一旦我添加了透明 child window,事件将在大约 5 秒后停止随机发送,直到我移动鼠标。例如,如果我滚动,它可以正常工作大约 5 秒,然后根本不会触发 scrollWheel
事件,直到我移动鼠标一点。
(我需要透明 child window 才能在 Metal 视图顶部显示本机元素)。
这是我添加 child window:
的方法////
CGRect wRect = main_window.frame;
NSView *contentView = main_window.contentView;
CGRect cRect = contentView.frame;
CGRect rect = CGRectMake(wRect.origin.x, wRect.origin.y, cRect.size.width, cRect.size.height);
NSWindow *overlayWindow = [[NSWindow alloc]initWithContentRect:rect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
overlayWindow.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0];
[overlayWindow setOpaque:YES];
child_view = [[MyView2 alloc] init];
overlayWindow.contentView = child_view;
[main_window addChildWindow:overlayWindow ordered:NSWindowAbove];
///////////
[main_window center];
[main_window makeKeyAndOrderFront:nil];
如果我删除 addChildWindow
调用,事件将再次正常运行。
另外很有趣的是,如果我不通过 overlayWindow.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0];
将 child window 的背景设置为透明,则不会向主 window 发送任何事件].
更新
这仅适用于鼠标事件(滚动、单击)。键盘事件工作正常。
更新 2
我注意到所有事件在 mouseExited
事件后立即停止,我必须随机移动光标直到我得到 mouseEntered
事件,然后滚动再次工作。
我通过向主视图添加一个 child 视图来解决这个问题,而不是添加一个全新的 window:
[contentView addSubview:child_view];
我不知道 child window 的问题是什么,可能是透明 child windows.
的错误