如何在Swift中使用AVPlayerViewController检测全屏模式? [英] How to detect fullscreen mode using AVPlayerViewController in Swift?
本文介绍了如何在Swift中使用AVPlayerViewController检测全屏模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试检测 AVPlayerViewController
何时处于全屏模式,但我很难实现这一目标。我想知道用户何时选择展开按钮进入全屏,如下所示:
I am trying to detect when the AVPlayerViewController
is in full-screen mode, but I'm having a difficult time achieving this. I'd like to know when the user selects the expand button to enter full screen as shown here:
我根据这些建议添加了适当的观察者:
I've added the appropriate observer per these suggestions:
- Detect Video playing full screen in Portrait or landscape
- How to detect fullscreen mode of AVPlayerViewController
相应的代码:
var avWidth:CGFloat = 375
var avHeight:CGFloat = 300
override func viewDidLoad()
{
super.viewDidLoad()
let path = NSBundle.mainBundle().pathForResource("cable pressback", ofType: "mp4")
let url = NSURL.fileURLWithPath(path!)
let player = AVPlayer(URL: url)
playerViewController.player = player
playerViewController.view.frame = CGRectMake(0, 100, self.view.frame.size.width, 300)
playerViewController.view.translatesAutoresizingMaskIntoConstraints = true
view.addSubview(playerViewController.view)
self.addChildViewController(playerViewController)
[playerViewController .addObserver(self, forKeyPath:"videoBounds" , options: NSKeyValueObservingOptions.New, context: nil)]
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>)
{
print("playerViewController.view.frame = \(playerViewController.view.frame)")
if keyPath == "videoBounds"
{
let rect = change!["new"]! as! NSValue
if let newrect = rect.CGRectValue() as CGRect?
{
if newrect.width > 0 || newrect.height > 0
{
if avWidth > 0 || avHeight > 0
{
if newrect.width > avWidth || newrect.height > avHeight
{
print("Full Screen")
}
else if newrect.width < avWidth || newrect.height < avHeight
{
print("Normal screen")
}
}
avWidth = newrect.width
avHeight = newrect.height
}
}
}
}
然而,它似乎永远不会到达代码 print(全屏)
。无论播放器处于正常模式还是全屏模式,它都会打打印(正常屏幕)
。
However, it never seems to reach the code print("Full Screen")
. It's hitting print("Normal Screen")
regardless of whether the player is in normal or full screen mode.
谢谢!
推荐答案
针对Swift 3进行了更新:
添加 playerViewController
对象的观察者:
playerViewController(self, forKeyPath: "videoBounds", options: NSKeyValueObservingOptions.new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
{
if keyPath == "videoBounds"
{
if let rect = change?[.newKey] as? NSValue
{
if let newrect = rect.cgRectValue as CGRect?
{
// 200 is height of playerViewController in normal screen mode
if newrect.size.height <= 200
{
print("normal screen")
}
else
{
print("full screen")
}
}
}
}
}
这篇关于如何在Swift中使用AVPlayerViewController检测全屏模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文