MPMoviePlayerController - 全屏 | Swift

MPMoviePlayerController - Full Screen | Swift

我目前正在尝试在我的 Swift 应用程序中实施 MPMoviePlayerController。加载视频后(通过单击前一个视图控制器上的按钮),我希望视频进入全屏模式。使用我当前的代码,这在纵向上完美运行,但一旦视频旋转到横向,它只占屏幕的一半。有什么办法可以解决这个问题吗?

这是我的代码:

 override func viewDidLoad() {
  super.viewDidLoad()

  var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")

  moviePlayer = MPMoviePlayerController(contentURL: url)
  moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)

  self.view.addSubview(moviePlayer.view)
  moviePlayer.fullscreen = true

  moviePlayer.controlStyle = MPMovieControlStyle.Embedded}

这里有一些屏幕截图可以帮助解释我的意思:

视图没有调整大小,因为您的代码从来没有告诉它。

如果您希望它在旋转时调整大小,您需要在容器视图因旋转而改变时调整 MPMoviePlayerController 的视图大小。 (在 viewWillLayoutSubviews 中设置框架或使用自动布局将 MPMoviePlayerController 的视图限制为呈现控制器的视图。)

您也可以使用 MPMoviePlayerViewController 代替 MPMoviePlayerController。来自文档:

Unlike using an MPMoviePlayerController object on its own to present a movie immediately, you can incorporate a movie player view controller wherever you would normally use a view controller.

你可以这样使用它:

class MainViewController : UIViewController {
    var movieViewController : MPMoviePlayerViewController?

    override func viewDidLoad() {
        var url = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")!
        movieViewController = MPMoviePlayerViewController(contentURL: url)
        movieViewController?.moviePlayer.fullscreen = true
        movieViewController?.moviePlayer.controlStyle = .Embedded
    }

    override func viewDidAppear(animated: Bool) {
        self.presentMoviePlayerViewControllerAnimated(movieViewController)
    }
}

对于 Xcode 6.4 , Swift 1.2:

解决方案:

我在

中设置了全屏模式

viewWillLayoutSubviews()

  override func viewWillLayoutSubviews()
{
    self.moviePlayer.fullscreen = true
}

完整代码:

import UIKit

导入媒体播放器

class XXXMovieC: UIViewController
{

private var moviePlayer: MPMoviePlayerController!
var movieURL: NSURL!

required init(coder aDecoder: NSCoder)
{
    super.init(coder: aDecoder)
}

override func viewWillLayoutSubviews()
{
    self.moviePlayer.fullscreen = true
}


override func viewDidLoad()
{
    super.viewDidLoad()

    setupMoviePlayer()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "movieFinishedCallback:", name: MPMoviePlayerWillExitFullscreenNotification, object: self.moviePlayer)

    self.moviePlayer.shouldAutoplay = true
    self.moviePlayer.prepareToPlay()
    self.moviePlayer.play()
}

func setupMoviePlayer()
{
    self.moviePlayer = MPMoviePlayerController(contentURL: self.movieURL)
    self.moviePlayer.view.frame = self.view.frame
    self.moviePlayer.controlStyle = MPMovieControlStyle.Embedded
    self.view.addSubview(self.moviePlayer.view)
}

func movieFinishedCallback(notification:NSNotification)
{
    self.dismissViewControllerAnimated(false, completion: { () -> Void in
        self.movieURL = nil
    })
}

}