我想将一个矩形从另一个collectionview(cellContentCollectionView)转换为我的根视图控制器中的一个相等的矩形。
用于执行此操作的实例方法是convert(_:to :),但是我在根视图控制器框架中设置UIView的框架时遇到了问题。
这是我到目前为止所拥有的......
cellContentCollectionView?.convert((playerLayer?.frame)!, to: fullScreenPlayerView)
cellContentCollectionView是它所在的collectionView。它恰好位于collectionViewCell中。
有什么建议吗?
答案 0 :(得分:0)
您没有解释cellContentCollectionView
和playerLayer
之间的确切关系,因此我将假设最坏的情况:playerLayer
不是cellContentCollectionView
的子视图
我还怀疑playerLayer
实际上并不是一个视图,而是CALayer
。没关系,因为在iOS上,视图的frame
始终是layer.frame
,所以我们可以处理这些图层。
图层的frame
位于其超层的几何图形中。因此,您必须要求其超级层转换其frame
。但是,如果图层未转换,您可以改为让图层转换自己的bounds
。
如果您打算使用生成的矩形作为目标图层的框架,则必须转换为目标图层的超级图层。您不能只转换为目标图层的几何图形并设置目标图层的bounds
,因为这不会更新目标图层的position
。
因此我想你想写这个:
if
let playerLayer = playerLayer,
let fullScreenPlayerSuper = fullScreenPlayerView.layer.superlayer
{
let frame = playerLayer.convert(playerLayer.bounds, to: fullScreenPlayerSuper)
fullScreenPlayerView.frame = frame
}
答案 1 :(得分:0)
假设playerLayer
是UIView
,我会这样做。
guard let playerLayer = playerLayer, superview = playerLayer.superview else { return }
fullScreenPlayerView.convert(playerLayer.frame, from: superview)