2014-06-17 2 views
1

Работа с полноэкранным Mac-приложением. Я использую webView для отображения информации о погоде. Невозможно показать один и тот же контент webView для всех подключенных экранов монитора, как на главном экране (не используя Airplay-mirroring). В настоящее время я могу установить только обои других дисплеев. используя ([экраны NSScreen]) Может кто-нибудь, пожалуйста, посоветуйте мне что-нибудь? Благодарю.Mac osx - Как показать одинаковое содержимое приложения для всех подключенных дисплеев

+0

Вы не должны делать это, потому что это будет мешать моему использованию другого монитора. У меня есть два монитора, потому что я хочу иметь возможность запускать два разных приложения в полноэкранном режиме, по одному на каждом мониторе. Кроме того, создайте два окна. Но не удивляйтесь, если людям это не нравится. – gnasher729

+0

После поиска я обнаружил, что мы можем подключить несколько мониторов, используя «Mini displayPort to VGA Adapter». После того, как более одного экрана мы можем разместить любое окно, открытое на главном экране, другому монитору. Но не знаю, как играть со вторичными мониторами программно. Можем ли мы открыть любое окно на вторичном мониторе через код ??? – Yogendra

ответ

1

Это было так просто. Я искал много связанных вещей, таких как «CGDisplayCapture» и «CGShieldingWindowLevel()», но в моем случае не было необходимости.

1 .. Ниже строки даст вам все подключенные экраны

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

2 .. Теперь найти размер экрана, потому что подключенные дисплеи могут иметь различный размер экрана то текущий экран. И Alloc новое окно с текущим экраном и текущим размером экрана, как parameter--

// 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 .. Мы не можем добавить какое-либо представление в виде subview для нескольких окон. А новое окно нуждается в том же представлении, что и в моем главном окне. Таким образом, я создал копию той же точки зрения с этим -

id copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self.webView]]; 

5 .. Назначают же кадр размера экрана с этой точки зрения и добавил это в новом окне.

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

И все сделано. Теперь к тому же изменению на обоих дисплеях нужно внести изменения для обоих объектов окна.