Mac osx - 如何向所有连接的显示器显示相同的应用程序内容

时间:2014-06-17 13:25:24

标签: objective-c macos screen-resolution multiple-monitors

使用全屏mac app。我正在使用webView显示一些天气相关的信息。无法向主屏幕上显示的所有连接的监视器屏幕显示相同的webView内容。(不是使用Airplay-mirroring)。 目前我只能设置其他显示器的壁纸。通过使用([NSScreen屏幕]) 有人可以告诉我什么吗?感谢。

1 个答案:

答案 0 :(得分:1)

这很简单。我搜索了许多相关的东西,比如“CGDisplayCapture”和“CGShieldingWindowLevel()”,但在我的情况下没有必要这样做。

1 ..下面的行将为您提供所有连接的屏幕

for (NSScreen *screen in [NSScreen screens]) {  }

2 ..现在找到屏幕尺寸,因为连接的显示器可能具有与当前屏幕不同的屏幕尺寸。并使用当前屏幕和当前屏幕大小分配一个新窗口作为参数 -

    // Draw a new window to fill the screen
    NSRect screenRect = CGRectMake(0, 0, screen.frame.size.width , screen.frame.size.height);

    secondaryMonitorWindow = [[NSWindow alloc] initWithContentRect:screenRect styleMask:NSBorderlessWindowMask  backing:NSBackingStoreBuffered  defer:NO  screen:screen];

3 ..在我的情况下,桌面图标应该在窗口上可见,所以我将窗口级别设置为kCGDesktopWindowLevel。并使这个窗口“makeKeyAndOrderFront”。

4 ..我们无法将任何视图作为子视图添加到多个窗口。新窗口需要与我的主屏幕窗口相同的视图。所以我用这个 -

创建了相同视图的副本
    id copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self.webView]];

5 ..为此视图指定相同的屏幕尺寸框架并将其添加到新窗口。

    [copyOfView setFrame:screenRect];
    [secondaryMonitorWindow.contentView addSubview:(WebView*)copyOfView];

完成了。现在对两个显示进行相同的更改,必须对两个窗口对象进行更改。