捏手势以展开UICollectionView单元格



我正在开发的一个应用程序需要与iPad上的照片应用程序非常相似的布局。有一个UIView的网格,用户应该能够捏成一个,当他们捏进去的时候,看着视图的大小增长,直到它变成全屏。

到目前为止,我已经设置了一个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(_:),传递单元格。

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

一种密切相关的可能性是自定义布局,虽然不那么简单,但可能更健壮,因此更可取。由于集合视图的UICollectionViewLayout对象可以指定特定单元格的zIndex,因此可以在捏手势开始时重新加载该单元格,并仅更新该单元格的Z索引。

相关内容

  • 没有找到相关文章

最新更新