【发布时间】:2016-03-14 01:23:37
【问题描述】:
我创建了一个简单的ViewController 类,它使用AVPlayer 播放直播视频。直播在viewDidLoad加载,当用户按下播放时,它播放直播,很简单。
父 VC 设置为仅纵向。
我有另一个按钮,它使用自定义 segue 连接到另一个 ViewController。
如何将 AVPlayer 及其“状态”传递给目标 ViewController?......即如果 AVPlayer 当前正在播放,它应该在从父 VC 传递到目标 VC 时保持其状态。
仅供参考:我没有使用prepareForSegue。
这是完整的简单代码:
ViewController.swift:
class ViewController: UIViewController {
@IBOutlet var playerView: UIView!
var player = AVPlayer()
var avPlayerLayer: AVPlayerLayer!
override func viewDidLoad()
{
super.viewDidLoad()
let url = "http://vevoplaylist-live.hls.adaptive.level3.net/vevo/ch1/appleman.m3u8" //"http://68.235.37.11:1935/vietmagazine/vietmagazine/playlist.m3u8"
let playerItem = AVPlayerItem( URL:NSURL( string:url )! )
player = AVPlayer(playerItem:playerItem)
avPlayerLayer = AVPlayerLayer(player: player)
// Add the layer to the view
playerView.layer.insertSublayer(avPlayerLayer, atIndex: 0)
}
@IBAction func playVIdeo(sender: AnyObject)
{
avPlayerLayer.player!.play()
}
@IBAction func change(sender: AnyObject)
{
avPlayerLayer.player!.pause()
self.performSegueWithIdentifier("CustomSegue", sender: self)
}
override func viewWillLayoutSubviews()
{
super.viewWillLayoutSubviews()
// Layout subviews manually
avPlayerLayer.frame = playerView.bounds
}
}
CustomSegue.swift:
class CustomSegue: UIStoryboardSegue
{
override func perform()
{
let sourceVC = self.sourceViewController
let destinationVC = self.destinationViewController
sourceVC.view.addSubview(destinationVC.view)
destinationVC.view.transform = CGAffineTransformMakeScale(0.05, 0.05)
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: { () -> Void in
destinationVC.view.transform = CGAffineTransformMakeScale(1.0, 1.0)
} ) { (finished) -> Void in
destinationVC.view.removeFromSuperview()
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.001 * Double(NSEC_PER_SEC)))
dispatch_after(time, dispatch_get_main_queue(), { () -> Void in
sourceVC.presentViewController(destinationVC, animated: false, completion: nil)
})
}
}
}
谢谢。
【问题讨论】:
-
你发现了吗?
标签: ios swift avplayer uistoryboardsegue