AVPlayer Swift:如何隐藏控件并禁用横向视图?

5

由于这是我的第一篇文章,先简单介绍一下自己:通常我设计各种东西(主要是UI),但我真的很想跨出编程领域来更好地理解你们。因此,我决定构建一个小应用程序开始学习。

我已经试图解决这个问题几个小时了——这是我第一次做应用程序项目,所以请原谅我的新手状态。

我只想做到隐藏AVPlayer的控件并禁用横向视图,但我就是不知道在哪里放置showsPlaybackControls = false

import UIKit
import AVKit
import AVFoundation


class ViewController: UIViewController {


    private var firstAppear = true

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        if firstAppear {
            do {
                try playVideo()
                firstAppear = false
            } catch AppError.InvalidResource(let name, let type) {
                debugPrint("Could not find resource \(name).\(type)")
            } catch {
                debugPrint("Generic error")
            }

        }
    }

    private func playVideo() throws {
        guard let path = NSBundle.mainBundle().pathForResource("video", ofType:"mp4") else {
            throw AppError.InvalidResource("video", "m4v")
        }
        let player = AVPlayer(URL: NSURL(fileURLWithPath: path))
        let playerController = AVPlayerViewController()
        playerController.player = player
        self.presentViewController(playerController, animated: false) {
            player.play()
        }
    }
}

enum AppError : ErrorType {
    case InvalidResource(String, String)
}
1个回答

15

showsPlaybackControlsAVPlayerViewController的一个属性,因此您可以在创建后设置它:

playerController.showsPlaybackControls = false

如果你想仅允许横屏,则可以创建一个子类继承 AVPlayerViewController,重写 supportedInterfaceOrientations 方法并只返回横屏模式,然后使用该子类替换原来的 AVPlayerViewController

更新

正如评论中提到的那样,如果您查看 AVPlayerViewController 的文档,将会发现一个警告:

不要子类化 AVPlayerViewController。覆盖此类方法是不受支持的,并且会导致未定义的行为。

他们可能不希望您覆盖可能影响行为的播放相关方法,但我认为仅覆盖 supportedInterfaceOrientations 是安全的。

但是,如果您需要另一种解决方案,可以创建自己的视图控制器类,覆盖 supportedInterfaceOrientations 方法以仅返回横屏模式,并将 AVPlayerViewController 放置在该视图控制器内部。


虽然这可能可以正常工作,但请记住,根据苹果文档,不建议或支持子类化AVPlayerViewController:https://developer.apple.com/documentation/avkit/avplayerviewcontroller - taykay08
1
@taykay08,感谢你提供的信息,我已经更新了我的答案并提供了另一种解决方案。 - EmilioPelaez
你好,回答不错,但在我的情况下,当我从AVPlayerController按下“完成”按钮并回到初始的“ViewController”时,当只有“Portrait”时就改变为横向。 附注:我使用了一个PresentViewController来转到包含AVPlayerController的ViewController。有任何想法为什么会这样,以及如何解决它吗? - Cristian Mora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接