UICollectionViewCell 滚动时缩放单元格大小

Posted

技术标签:

【中文标题】UICollectionViewCell 滚动时缩放单元格大小【英文标题】:UICollectionViewCell scale cell size while scrolling 【发布时间】:2015-05-05 21:58:49 【问题描述】:

我正在尝试创建一个 UICollectionView,当“离开”顶部或底部的可见区域时,UICollectionViewCell 会按比例缩小。并在“进入”可见区域时放大到正常大小。

我一直在尝试一些缩放/动画代码: scrollViewDidScroll() ,但我似乎无法正确处理。

我的完整函数如下所示:

 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)
            )

        
    

这在某种程度上是正确的方法,还是有其他更好的方法?

【问题讨论】:

查看 iCarousel。这是一个很棒的库,支持我认为您正在寻找的效果。 谢谢 Tobias,我马上去看看! 你成功了吗? 【参考方案1】:

不是一个完整的解决方案,而是一些评论/指针:

    1234563 /p>

    执行if pos.origin.y == 50 绝对不是一个好主意,因为滚动可能不会通过所有值(也就是说,它可能会从 45 跳到 53)。因此,如果您想确保动画仅在“边界”处执行一次(例如,存储最后一个位置或标志),请使用 &gt;= 并包含其他方式。

【讨论】:

太棒了,我会记住这一点并继续测试东西。谢谢!

以上是关于UICollectionViewCell 滚动时缩放单元格大小的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionViewCell 内的 UICollectionView 中平滑滚动

大 UICollectionViewCell 在滚动时消失

UICollectionViewCell 内的 UIScrollView 不滚动

向下滚动时多次选择 UICollectionViewCell?

UICollectionViewCell 滚动时缩放单元格大小

UICollectionViewCell 在滚动开始后立即更改数据