最近一个Mac项目要做到用户共享桌面UI需要在桌面最前端展示一个蓝色的边框,需要做到用户分享哪个显示器蓝框到哪个显示屏上边,踩了一点雷,所以记录下来。
结果如下图
因为我接了一个显示器所以 我直接写死了获取ID
点击按钮1分享第一个屏幕 点击按钮2分享第二个屏幕
localControl.window 的window等级需要设置一下(子类化一个NSWindow)
[self setLevel:NSScreenSaverWindowLevel];
self.animationBehavior = NSWindowAnimationBehaviorNone;
self.collectionBehavior = NSWindowCollectionBehaviorMoveToActiveSpace;
现在已经可以分享到指定的桌面了,但是在滑动的时候会发现,蓝框只保持在屏幕的第一个桌面,假如屏幕有多个桌面则会出现滑动到另一个屏幕的时候蓝框消失。
这样是有问题的,我们应该添加如下代码
//workspace改变时通知
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(changeActiveSpace:) name:NSWorkspaceActiveSpaceDidChangeNotification object:nil];
- (void)changeActiveSpace:(NSNotification *)sender
{
[localControl.window close];
[localControl.window makeKeyAndOrderFront:nil];
}
这样就实现了蓝框始终在workspace窗口之上。