【发布时间】:2013-12-26 19:07:27
【问题描述】:
获取最有可能是投影仪或 AirPlay 显示器的 NSScreen 实例的最佳方法是什么? (甚至是 TV-Out?)我正在编写一个演示软件,并且需要知道哪个屏幕最有可能代表“演示”屏幕。
想到了一些选项:
A.如果有,请使用第二个实例。当然,如果连接的屏幕超过两个,这显然不会产生好的效果。
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
projectorScreen = screens[1];
}
B.如果不是主屏幕,请使用第一个屏幕。其背后的原因是,在镜像的情况下,第一个屏幕应该是像素深度最高的屏幕。
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
if(screens[0] != projectorScreen) {
projectorScreen = screens[0];
}
}
C.使用不是主屏幕的最低屏幕。原因只是选择 any 不是主屏幕的屏幕。
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
for(NSScreen* screen in screens) {
if(screen != projectorScreen) {
projectorScreen = screen;
break;
}
}
}
D.使用NSScreen 的deviceDescription 字典,找到真实世界坐标中最大的屏幕。也就是将NSDeviceSize 的宽度和高度除以NSDeviceResolution,理论上这应该产生一个以平方英寸为单位的面积。但是我并不完全相信操作系统知道每个屏幕的实际大小。
还有其他建议吗?
当然,没有任何 100% 正确的启发式方法,但话又说回来,大部分时间选择正确的屏幕就足够了。
【问题讨论】:
-
弹出菜单可以指示投影画面吗?
-
详细说明:您的第五个选择是有一个弹出菜单,您可以在其中列出所有屏幕,并让用户选择他们想要呈现的任何屏幕。 (未发布为答案,因为您的问题对于选择默认值仍然有效。)