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
})
}
}
我目前正在尝试在我的 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
})
}
}