UICollectionViewCell在滚动时更改单元格大小
我试图创build一个UICollectionView,其中UICollectionViewCell在“离开”顶部或底部的可见区域时被缩小。 在“进入”可见区域时,按比例放大到正常大小。
我一直在尝试一些缩放/animation代码: scrollViewDidScroll()
,但我似乎无法得到正确的。
我的完整function如下所示:
func scrollViewDidScroll(scrollView: UIScrollView) { var arr = colView.indexPathsForVisibleItems() for indexPath in arr{ var cell = colView.cellForItemAtIndexPath(indexPath as! NSIndexPath)! var pos = colView.convertRect(cell.frame, toView: self.view) if pos.origin.y < 50 && pos.origin.y >= 0{ cell.hidden = false UIView.animateWithDuration(0.5, animations: { () -> Void in cell.transform = CGAffineTransformMakeScale(0.02 * pos.origin.y, 0.02 * pos.origin.y) }) }else if pos.origin.y == 50{ UIView.animateWithDuration(0.5, animations: { () -> Void in cell.transform = CGAffineTransformMakeScale(1, 1) }) } } }
这在某种程度上是正确的方法,还是有另一种更好的方法?
不是一个完整的解决scheme,而是一些评论/指针:
-
您不应该直接以这种方式
UICollectionViewLayout
集合视图单元格,而应该有一个自定义的UICollectionViewLayout
子类,它修改UICollectionViewLayoutAttributes
以包含所需的transform
并在必要时使布局无效。 -
这样做,
if pos.origin.y == 50
肯定不是一个好主意,因为滚动可能不会传递所有的值(也就是说,它可能从45跳到53)。 因此,如果要确保只在“边界”处执行一次animation(例如,存储最后一个位置或一个标记),请使用>=
并包含其他一些方法。