我的应用程序(Swift 3,带有UIStoryboard
)显示了节目中的剧集列表。每当用户点击表格中的一集时,他/她就会得到一个详细视图(从上到下):
根据用户类型,我们希望有一个视频播放器,而不是显示剧集的图像,以便订阅的人可以开始观看视频(未订阅的用户只会看到图像)。< / p>
根据我们用户的订阅状态,视频播放器应播放内容(已订阅)或显示图片(已取消订阅)。
有没有办法动态删除图像并将其替换为完全相同的点和尺寸的视频播放器?如果是这样,当前应用于图像的自动布局约束会发生什么?
答案 0 :(得分:2)
在故事板中的UIView
顶部放置UIImageView
。将其与UIImageView
的所有4条边对齐。然后通过设置isHidden
属性隐藏并根据需要显示它们。
然后,在AVPlayer
代码中插入UIView
。
答案 1 :(得分:0)
以下解决方案适用于代码中的UIStoryboard
和UI。
UIView
首选大小拖到画布上,添加自动布局约束并创建一个插座(称为&#34; containerView&#34;)URL
或文件配置AVPlayer,使用播放器初始化AVPlayerLayer实例并将图层添加到containerView's
图层层次结构UIImageView
import UIKit
import AVFoundation
class ViewController: UIViewController {
// MARK: - Properties
@IBOutlet var containerView: UIView!
private var imageView: UIImageView!
private var isUserSubscribed = true
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
// Video
let url = URL(string: "https://content.jwplatform.com/manifests/vM7nH0Kl.m3u8")!
let avPlayer = AVPlayer(playerItem: AVPlayerItem(url: url))
let avPlayerLayer = AVPlayerLayer(player: avPlayer)
avPlayerLayer.frame = containerView.bounds
containerView.layer.insertSublayer(avPlayerLayer, at: 0)
// Image
imageView = UIImageView(image: UIImage(named: "someImage"))
imageView.frame = containerView.frame
containerView.addSubview(imageView)
// Condition
if isUserSubscribed {
imageView.isHidden = true
avPlayer.play()
} else {
imageView.isHidden = false
}
}
}
使用这种方法,您需要添加自己的播放控件,这基本上归结为添加带操作的按钮,触发AVPlayer.play()
,AVPlayer.stop()
等。