在纵向锁定应用程序中为 MPMoviePlayerViewController 启用横向
Enable landscape for MPMoviePlayerViewController in a Portrait locked application
我正在使用 swift 开发一个 iOS 应用程序(仅限纵向)。我有一个视频部分,其中我提供了一个视频列表。当用户点击其中之一时,我使用 MPMoviePlayerViewController 来呈现电影播放器视图。
这是我的代码:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let videoId = videos.objectAtIndex(indexPath.row).objectForKey("id") as! String
let videoPlayerViewController = XCDYouTubeVideoPlayerViewController.init(videoIdentifier: videoId)
videoPlayerViewController.moviePlayer.scalingMode = .AspectFit
videoPlayerViewController.moviePlayer.fullscreen = true
videoPlayerViewController.moviePlayer.controlStyle = .Fullscreen
videoPlayerViewController.moviePlayer.shouldAutoplay = true
videoPlayerViewController.moviePlayer.prepareToPlay
self.presentMoviePlayerViewControllerAnimated(videoPlayerViewController)
}
我按如下方式在我的 AppDelegate 上启用了旋转:
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
//If the video is being presented, let the user change orientation, otherwise don't.
if var presentedViewController = window?.rootViewController?.presentedViewController {
// Get the controller on the top of the stack
while (presentedViewController.presentedViewController) != nil {
presentedViewController = presentedViewController.presentedViewController!
}
if (presentedViewController.isKindOfClass(MPMoviePlayerViewController) && !presentedViewController.isBeingDismissed()) {
return UIInterfaceOrientationMask.All
}else{
return UIInterfaceOrientationMask.Portrait
}
}
return UIInterfaceOrientationMask.Portrait
}
一切似乎都正常,但是当我从 MPMoviePlayerViewController 返回时,我的 tableview 乱七八糟如下:
我认为这个问题是由 AutoLayout 引起的,但我不知道如何解决它。希望有人帮忙。
发生这种情况是因为当您打开视频时,即使您呈现的视图控制器是纵向的,它也会旋转,并且布局会发生变化。
有几个解决方案:
- 关闭视频时可以强制竖屏
- 您可以在新的
UIWindow
中打开视频。这样在呈现视频时,呈现 UIViewController
根本不会改变。
我正在使用 swift 开发一个 iOS 应用程序(仅限纵向)。我有一个视频部分,其中我提供了一个视频列表。当用户点击其中之一时,我使用 MPMoviePlayerViewController 来呈现电影播放器视图。
这是我的代码:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let videoId = videos.objectAtIndex(indexPath.row).objectForKey("id") as! String
let videoPlayerViewController = XCDYouTubeVideoPlayerViewController.init(videoIdentifier: videoId)
videoPlayerViewController.moviePlayer.scalingMode = .AspectFit
videoPlayerViewController.moviePlayer.fullscreen = true
videoPlayerViewController.moviePlayer.controlStyle = .Fullscreen
videoPlayerViewController.moviePlayer.shouldAutoplay = true
videoPlayerViewController.moviePlayer.prepareToPlay
self.presentMoviePlayerViewControllerAnimated(videoPlayerViewController)
}
我按如下方式在我的 AppDelegate 上启用了旋转:
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
//If the video is being presented, let the user change orientation, otherwise don't.
if var presentedViewController = window?.rootViewController?.presentedViewController {
// Get the controller on the top of the stack
while (presentedViewController.presentedViewController) != nil {
presentedViewController = presentedViewController.presentedViewController!
}
if (presentedViewController.isKindOfClass(MPMoviePlayerViewController) && !presentedViewController.isBeingDismissed()) {
return UIInterfaceOrientationMask.All
}else{
return UIInterfaceOrientationMask.Portrait
}
}
return UIInterfaceOrientationMask.Portrait
}
一切似乎都正常,但是当我从 MPMoviePlayerViewController 返回时,我的 tableview 乱七八糟如下:
我认为这个问题是由 AutoLayout 引起的,但我不知道如何解决它。希望有人帮忙。
发生这种情况是因为当您打开视频时,即使您呈现的视图控制器是纵向的,它也会旋转,并且布局会发生变化。
有几个解决方案:
- 关闭视频时可以强制竖屏
- 您可以在新的
UIWindow
中打开视频。这样在呈现视频时,呈现UIViewController
根本不会改变。