Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 收缩手势以展开UICollectionView单元_Ios_Cocoa Touch_Uicollectionview - Fatal编程技术网

Ios 收缩手势以展开UICollectionView单元

Ios 收缩手势以展开UICollectionView单元,ios,cocoa-touch,uicollectionview,Ios,Cocoa Touch,Uicollectionview,我正在开发的一个应用程序需要与iPad上的照片应用程序非常相似的布局。有一个由UIViews组成的网格,用户应该能够压缩成一个网格,当他们压缩时,观察该视图的大小不断增大,直到其全屏显示 到目前为止,我已经设置了一个UICollectionViewController和一个自定义集合视图单元格。我将挤压手势识别器添加到自定义单元格中。当用户缩进时,单元格的大小会增大 我现在面临的问题是,当细胞膨胀时,它并不是在所有其他细胞之上分层的。相反,它隐藏在后面加载的单元格下 我在想,解决方案可能是,当集

我正在开发的一个应用程序需要与iPad上的照片应用程序非常相似的布局。有一个由
UIView
s组成的网格,用户应该能够压缩成一个网格,当他们压缩时,观察该视图的大小不断增大,直到其全屏显示

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

我现在面临的问题是,当细胞膨胀时,它并不是在所有其他细胞之上分层的。相反,它隐藏在后面加载的单元格下

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

但是,我不确定这是否是最佳解决方案,也许有一些简单的方法可以确保某个单元格在集合视图中的所有其他单元格之上分层

下面显示了我当前实现的一段代码,说明了我如何缩放单元格。这就产生了一个问题,即当单元格扩展时,它会隐藏在后面的单元格下

 @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
对象,您可以在收缩手势开始时重新加载单元格,并仅更新该单元格的Z索引。

对于这些情况,我也使用复制视图方法。尽管这需要更多的努力(定位、复制单元格的外观),但它的实现更简洁,不会弄乱实际的单元格和集合视图,而且如果在接收手势时添加图层,也不必处理图层。尝试了
将SubViewToFront(:)
?需要对集合视图本身的引用。。。不完全确定全部含义是什么。也许使用Z索引?将SubviewToFront带到工作中!谢谢你,乔希!但这不是真正的问题,对吗?你的问题更多的是关于最佳实践。就最佳实践而言,单元格扩展的手势识别器应该放在UICollectionViewController下还是放在自定义集合视图单元格中?在这种情况下,我觉得它应该放在集合视图本身中。缺点是你必须找出哪个细胞被击中。