ios – 捏手势扩展UICollectionView Cell

我正在处理的应用程序需要的布局与iPad上的Photos应用程序非常相似.有一个UIViews的网格,用户应该可以捏到一个,当他们捏进去的时候,观察视图的大小,直到全屏显示.

到目前为止,我已经设置了一个UICollectionViewController和一个自定义集合视图单元格.我将捏手势识别器添加到自定义单元格中.当用户捏入时,单元格的大小会增大.

我现在面临的问题是,当它扩展时,单元格不会叠加在所有其他单元格之上.相反,它隐藏在其后加载的单元格下.

我在想解决方案可能是当集合视图控制器识别到捏合手势时,它可能会隐藏被挤压的单元格.然后,创建一个新的UIView,它是集合视图单元的副本,其边界等于放置单元格的位置.然后,该视图可以是可以被挤压,旋转和平移的视图.一旦用户结束手势,视图将仅动画回原始单元格位置,然后设置为零.

但是,我不确定这是否是最佳解决方案,并且可能有一些简单的方法可以确保某个单元格位于集合视图中所有其他单元格的顶部.

我目前实现如何缩放单元格的片段代码如下所示.这是在细胞扩展时产生细胞隐藏在后面的细胞中的问题.

 @objc func scalePiece(_ gestureRecognizer : UIPinchGestureRecognizer) {
    guard gestureRecognizer.view != nil else { return 

    if gestureRecognizer.state == .began || 
       gestureRecognizer.state == .changed {

        gestureRecognizer.view?.transform = (gestureRecognizer.view?.transform.scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale))!

        gestureRecognizer.scale = 1.0

    }
}

最佳答案 修复其他单元格的一个简单方法就是在集合视图上调用bringSubviewToFront(_ :),传递单元格.

但是,我不确定这是否是最佳的:因为你并不真正拥有单元格/集合视图的层次结构,一般来说你不应该像这样直接触摸子视图.

一个密切相关的可能性 – 不是那么简单,但可能更强大,因而更可取 – 是定制布局.从集合视图的UICollectionViewLayout对象can specify the zIndex of a particular cell开始,您可以在捏合手势开始时重新加载单元格并更新该单元格的Z索引.

点赞