捏手势以扩展UICollectionView单元格

时间:2019-01-17 17:19:30

标签: ios cocoa-touch 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

    }
}

1 个答案:

答案 0 :(得分:1)

补救单元后面其他单元的一种简便方法是在集合视图上调用bringSubviewToFront(_:),使单元通过。

注意事项,但是,我不确定这是否是 optimized :由于您并不真正拥有单元格/集合视图的层次结构,因此通常来说您不应该像这样直接触摸子视图。

自定义布局是一种与之密切相关的可能性-并非那么简单,但可能更健壮,因此更可取。由于集合视图的UICollectionViewLayout对象can specify the zIndex of a particular cell,您可以在收缩手势开始时重新加载单元格,并仅更新该单元格的Z索引。