我有一个NSWindow
我想把它放在一切前面(计算机的每个应用程序、全屏应用程序等)。即使我点击后台应用程序,NSWindow
也无法进入后台。并且NSWindow
必须跟随用户屏幕,例如,如果用户将桌面切换到桌面2,等等......我该怎么做?
谢谢!
3 回答
如果您不需要在其他应用程序的全屏窗口中可见,那并不太难。
首先,要领先于其他一切,只需 setLevel: 使用 NSFloatingWindowLevel 或更高。尝试不同的值,看看哪个值适合您的需要。
接下来,即使用户更改了 Spaces(可能包括 Exposé/Mission Control),也要保持领先,使用适当的标志对 setCollectionBehavior:,或者如果您要在笔尖。可以加入所有空间或移动到活动空间将确保您在每个空间中保持可见,但方式略有不同。您可能希望将 Exposé 设置为固定,或者也可能是瞬态。再次,尝试两种方式,看看。
但是,当用户切换到全屏空间或仪表板或启动板时,Lion 将隐藏所有空间和移动到活动空间窗口。如果你看的话,你会发现它对这三种情况的每一种都以不同的方式做到这一点。雪豹做事有点不同,山狮也是。
如果你想解决最后一个问题,你需要一点黑客技术——以及针对每种情况和每个操作系统版本的不同形式的黑客技术。基本技巧是捕捉与隐藏相关的通知并在适当的时候取消隐藏自己。
您应该修改 info.plist 并将 Application is Agent 标志设置为 YES。代理的窗口可以显示在全屏窗口的前面。
在 info.plist 中将“Application is agent (UIElement)”都设置为“YES”
& 窗位:
self.view.window?.level = NSWindow.Level(rawValue: kCGMainMenuWindowLevel.hashValue - 1)
self.view.window?.collectionBehavior = [.stationary, .canJoinAllSpaces, .fullScreenAuxiliary]
帮助过我。