【发布时间】:2012-07-16 12:50:38
【问题描述】:
在一个使用 NSStatusItem 的应用中,自定义视图如下:
...您如何在以下情况下收到通知:
- 由于全屏应用,状态栏被隐藏
- 状态项移动位置是因为添加/删除/调整了另一个项?
当项目改变位置时,两者都是将自定义视图移动到正确位置所必需的。
【问题讨论】:
标签: macos cocoa notifications nsnotificationcenter nsstatusitem
在一个使用 NSStatusItem 的应用中,自定义视图如下:
...您如何在以下情况下收到通知:
当项目改变位置时,两者都是将自定义视图移动到正确位置所必需的。
【问题讨论】:
标签: macos cocoa notifications nsnotificationcenter nsstatusitem
有一个方法-[NSStatusItem setView:]。当您为状态项设置自定义视图时,此视图会自动插入到特殊的状态栏窗口中。您可以使用-[NSView window] 方法访问该窗口以观察其NSWindowDidMoveNotification:
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
NSStatusItem *statusItem = [self newStatusItem];
NSView *statusItemView = [self newStatusItemView];
statusItem.view = statusItemView;
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserver:self selector:@selector(statusBarDidMove:)
name:NSWindowDidMoveNotification object:statusItemView.window];
}
- (void)statusBarDidMove:(NSNotification *)note
{
NSWindow *window = note.object;
NSLog(@"%@", NSStringFromRect(window.frame)); // i.e. {{1159, 900}, {24, 22}}
}
每当状态栏变为可见或隐藏以及您的图标移动时,您都会收到通知。这是您更新弹出面板位置的机会。
【讨论】:
NSWindowDidMoveNotification的新位置上执行一个流畅的弹出动画,感觉应该很棒。