我想知道使用AVPlayer在Mac全屏播放视频的最佳方法是什么。
我试过这个,只有当我创建一个新的场景/ ViewController,附加一个AVPlayerView,然后在viewDidLoad中加载文件时它才有用。
let url = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("wallaby", ofType:"m4v"))
let videoPlayer = AVPlayer(URL: url)
playerView.player = videoPlayer
videoPlayer.play()
问题:
我能做的最好的就是提供一个全屏窗口:
self.view.frame.size = NSScreen.mainScreen().frame.size
感谢您提供有关示例代码的任何提示或指示!
答案 0 :(得分:2)
AVPlayerView
类包含showsFullScreenToggleButton
属性。
答案 1 :(得分:2)
我也经历过AVPlayerView的这个问题。如果我按下这样启用全屏按钮:
self.playerView.showsFullScreenToggleButton = YES;
然后我点击全屏按钮,视频进入全屏,然而,该应用程序不接受任何键输入,你不能激活Mission Montrol,LaunchPad等。这是一个非常糟糕的用户体验,我相信如果您将这样的应用程序提交到Mac App Store,它将被拒绝。此外,我还试图让我的AVPlayerView成为第一个响应者但却无济于事。
所以,我看了一下QuickTime Player如何在全屏播放视频方面工作。而且我注意到播放器控件上没有全屏按钮。它处理全屏的方式是当用户点击窗口的全屏控件时,它会重新调整大小,如果我是正确的AVPlayerView或Apple正在使用的。要实现与此类似的功能,请执行以下操作:
//The window that contains your AVPlayerView set the delegate
[self.window setDelegate:self];
//So you can respond to these notifications
- (void)windowDidEnterFullScreen:(NSNotification *)notification{
// wait a bit
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (self.playerView.isReadyForDisplay == YES) {
//Make sure the playerView is ready for display
//Set the playerView to the screen's current frame (Very Important!)
[self.playerView setFrame:[[NSScreen mainScreen] frame]];
//Do other UI related things here e.g hide elements e.t.c
}
});
}
- (void)windowWillExitFullScreen:(NSNotification *)notification{
//Do other UI related things here e.g show elements e.t.c
}
//If you have a ToolBar in your application do this:
- (NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions
{
return (NSApplicationPresentationFullScreen |
NSApplicationPresentationHideDock |
NSApplicationPresentationAutoHideMenuBar |
NSApplicationPresentationAutoHideToolbar);
}
// To determine if the window is in fullscreen e.g. if the application opened/restored in a fullscreen state the windowDidEnterFullScreen will not be called. So you need to do this:
- (BOOL) isFullScreenMode {
NSApplicationPresentationOptions opts = [[NSApplication sharedApplication ] presentationOptions];
if ( opts & NSApplicationPresentationFullScreen) {
return YES;
}
return NO;
}
我希望这能回答你的问题。此外,我认为这是Apple的一个错误,所以我明天会提交错误报告。
答案 2 :(得分:0)
我发现为什么全屏模式下的切换按钮不可点击,因为您可以探测到显示视图而不是窗口,例如您在按钮和视图之间使用storyboard segue,您应该将按钮链接到窗口(视图& #39;父母)。