在swift

时间:2017-06-17 19:20:53

标签: ios swift uiview uicollectionview uicollectionviewcell

我想将一个矩形从另一个collectionview(cellContentCollectionView)转换为我的根视图控制器中的一个相等的矩形。

用于执行此操作的实例方法是convert(_:to :),但是我在根视图控制器框架中设置UIView的框架时遇到了问题。

这是我到目前为止所拥有的......

cellContentCollectionView?.convert((playerLayer?.frame)!, to: fullScreenPlayerView)

cellContentCollectionView是它所在的collectionView。它恰好位于collectionViewCell中。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您没有解释cellContentCollectionViewplayerLayer之间的确切关系,因此我将假设最坏的情况: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)

假设playerLayerUIView,我会这样做。

guard let playerLayer = playerLayer, superview = playerLayer.superview else { return }

fullScreenPlayerView.convert(playerLayer.frame, from: superview)