是否可以检查 NSStatusItem 在系统菜单栏中是否可见?有时不是因为用户有太多的状态项和活动的应用程序菜单栏大小。
我可以通过“hack”检查状态项的位置,如下所示:
statusRect = [[_statusItem valueForKey:@"window"] frame];
但我不能做同样的事情是可见的:(它总是返回真)
BOOL visible = [[_statusItem valueForKey:@"window"] isVisible];
是否可以检查 NSStatusItem 在系统菜单栏中是否可见?有时不是因为用户有太多的状态项和活动的应用程序菜单栏大小。
我可以通过“hack”检查状态项的位置,如下所示:
statusRect = [[_statusItem valueForKey:@"window"] frame];
但我不能做同样的事情是可见的:(它总是返回真)
BOOL visible = [[_statusItem valueForKey:@"window"] isVisible];
我不相信没有真正糟糕的黑客是可行的
在您的 NSStatusItem 中有一个视图,并将 window.isVisible 与视图的 visibleRect 结合起来。无论如何,状态栏都不能被窗口遮挡。
=> 没用
在您的 NSStatusItem 中有一个视图,并尝试从正确的方式来确定是否绘制了 NSView
=> 不起作用
通过辅助功能 api 模拟鼠标点击并查看您的视图是否收到事件:
我试过的
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
item.title = @"TEST";
view = [[DDQuickMenuStatusItemView alloc] init];
view.item = item;
view.title = item.title;
item.view = view;
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkVisible:) userInfo:nil repeats:YES];
}
- (void)checkVisible:(id)timer {
NSLog(@"NOT WORKING vis: %d", (view.window.isVisible && !NSEqualRects(view.visibleRect, NSZeroRect)));
NSLog(@"NOT WORKING isDrawn: %d", (view.isDrawn));
}