传递一个AVPlayerLayer参考向上升级
我有一个AVPlayer位于一个collectionView单元格中,位于一个collectionView单元格中的一个collectionView中。传递一个AVPlayerLayer参考向上升级
所以回顾一下,我的每个单元都有一个集合视图。 收藏视图里面有三个单元格。其中一个包含AVPlayer。
我希望这样,当用户点击播放器时,单元格内的视频将动画以包围整个屏幕。
但是,由于播放器位于视图层次结构中,我最初尝试从单元内访问keywindow。它不能超出它所在的collectionView的范围。
最初推荐给我的是,当点击时,删除AVPlayer并将PlayerLayer的引用传递给根视图控制器。但是,我在这样做时遇到麻烦。这是我第一次不得不在层次结构中发送一个引用“up”。
所以我想主要问题是:
究竟如何发送playerLayers视图层次结构中引用了。
还是有可能引用playerLayers初始位置之前抽头,这样我可以无缝地过渡动画效果。
有什么建议吗?
我该如何在视图层次结构中向上发送playerLayers引用。
通过授权。当点击CollectionViewCell时,会调用didSelectItemAt(IndexPath)委托函数。您的AVPlayer应该位于某个自定义单元格中(本例中为AVPlayerCVCell),并且它具有AVPlayer属性。检查选中的单元格是否为AVPlayerCVCell,然后可以将根视图控制器的单个AVPlayer设置为该单元格的AVPlayer。 (可能必须将该单元格的玩家设置为零或进行其他形式的清理)。注:以下语法可能会稍微偏离,但所有的事情the Apple UICollectionView docs.
func collectionView(UICollectionView, didSelectItemAt: IndexPath){
if let playerCell = collectionView.cellForRowAt(indexPath) as? AVPlayerCVCell {
let player = playerCell.player
//Do something with player
self.mainPlayer = player
}
}
自哪里是你的根控制器高度记录。或者你可以有更多的代表层,但那将是如何访问玩家。
就动画而言,我会查看convert(rect: to view:)将一个视图坐标系转换为另一个视图坐标系。您可以获取相对于根控制器的单元坐标,将根控制器的主AVPlayer帧设置为该矩形,比动画显示为全屏。
我该如何使用convert(rect:查看:)这是我迄今为止的,但它没有将fullscreenview cellContentCollectionView?.convert((playerLayer?.frame)!)的框架设置为:fullScreenPlayerView) – Stefan