【问题标题】:Swift : Play Video in Landscape Mode When FullscreenSwift:全屏时以横向模式播放视频
【发布时间】:2014-11-21 06:28:39
【问题描述】:

我有这个代码:

import UIKit
import MediaPlayer

class ViewController: UIViewController {
    var moviePlayer:MPMoviePlayerController!
    var bounds: CGRect = UIScreen.mainScreen().bounds

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        var width:CGFloat = bounds.size.width
        var height = (width / 16) * 9

        var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")
        moviePlayer = MPMoviePlayerController(contentURL: url)
        moviePlayer.view.frame = CGRect(x: 0, y: 40, width: width, height: height)
        self.view.addSubview(moviePlayer.view)
        moviePlayer.fullscreen = true
        moviePlayer.controlStyle = MPMovieControlStyle.Embedded
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

它可以从服务器播放视频,但我有一个问题:

如果我想拥有纵向模式的应用程序,我是否仍然只能在用户以全屏模式播放视频时将其变为横向?如果有,该怎么做?

之前谢谢。

【问题讨论】:

  • 你是怎么找到的?
  • @Flakerim :不,我还没有找到答案……你有同样的问题吗?
  • 可以的。您可以以编程方式执行此操作,请查看此帖子:stackoverflow.com/questions/25651969/…

标签: ios swift xcode media-player mpmovieplayercontroller


【解决方案1】:

是的。当 MPMoviePlayercontroller 进入全屏模式时,您可以强制更改方向。只需将通知 MPMoviePlayerWillEnterFullscreenNotification 观察者添加到您的 viewdidload/viewwillappear 并更改方向如下

     override func viewDidLoad() {
            super.viewDidLoad()

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoMPMoviePlayerWillEnterFullscreen:", name: MPMoviePlayerWillEnterFullscreenNotification, object: nil);
//change orientation to portrait when user exits the full screen


 NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoMPMoviePlayerWillExitFullscreenNotification:", name: MPMoviePlayerWillExitFullscreenNotification, object: nil);

    }

   func  videoMPMoviePlayerWillEnterFullscreen(notification:NSNotification)
    {
        let value = UIInterfaceOrientation.LandscapeLeft.rawValue ;// UIInterfaceOrientation.LandscapeRight.rawValue
        UIDevice.currentDevice().setValue(value, forKey: "orientation")
    }



  func  videoMPMoviePlayerWillExitFullscreenNotification(notification:NSNotification)
    {
        let value = UIInterfaceOrientation.Portrait.rawValue ;// UIInterfaceOrientation.LandscapeRight.rawValue
        UIDevice.currentDevice().setValue(value, forKey: "orientation")
    }

别忘了移除观察者。

应用程序委托可以实现 application:supportedInterfaceOrientationsForWindow: 以返回一个 UIInterfaceOrientationMask,用于代替应用程序 Info.plist 中的值。

class AppDelegate: UIResponder, UIApplicationDelegate {
.....
   func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.AllButUpsideDown;//UIInterfaceOrientationMask.All for iPad devices

    }
}

参考:- https://developer.apple.com/library/ios/qa/qa1688/_index.html

https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2010-10-19
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    相关资源
    最近更新 更多