Reputation: 4758
I'm working on a Cocoa Mac app where I need to display a window/view on a secondary monitor, full-screen.
I know how to create a window that could be dragged onto the secondary monitor, but I was wanting to programmatically create the window and make it full screen on the external monitor.
Upvotes: 13
Views: 8324
Reputation: 16986
First, determine which screen you want to use by iterating over [NSScreen screens]
.
Create a full screen window with:
NSScreen *screen = /* from [NSScreen screens] */
NSRect screenRect = [screen frame];
NSWindow *window = [[NSWindow alloc] initWithContentRect:screenRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO
screen:screen];
[window setLevel: CGShieldingWindowLevel()];
You might want to google CGDisplayCapture()
as well.
Upvotes: 12
Reputation: 2295
The full screen window animations are choppy and don't look good in my opinion. The fullscreen view is much smoother.
Try this:
- (void)toggleMyViewFullScreen:(id)sender
{
if (myView.inFullScreenMode) {
[myView exitFullScreenModeWithOptions:nil];
} else {
NSApplicationPresentationOptions options =
NSApplicationPresentationHideDock |
NSApplicationPresentationHideMenuBar;
[myView enterFullScreenMode:[NSScreen mainScreen] withOptions:@{
NSFullScreenModeApplicationPresentationOptions : @(options) }];
}];
}
}
You can connect this to the fullscreen menu item in the Window menu (after inserting that into your nib) but be sure to change the action that the menu item fires to your toggleMyViewFullScreen: . Or your can invoke toggleMyViewFullScreen programmatically or when your app loads.
Upvotes: 0
Reputation: 119214
You can call the enterFullScreenMode:withOptions:
method of NSView
to acheieve the desired behaviour.
Read here and here for the options that can be supplied to this method.
You can use [NSScreen screens]
to get the list of available screens. See here for details.
Upvotes: 4