uicollectionView Cell不动画(swift4)

时间:2018-02-07 22:08:22

标签: ios animation uicollectionview uicollectionviewcell swift4

我的下面的代码有效,因为它在日志文件中打印了一些内容。但是当按下每个单独的单元格时,单元格中没有任何事情发生在期望打印日志文件中的语句。

        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {


        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! whyCollectionViewCell
        UIView.animate(withDuration: 1, delay: 0.1, usingSpringWithDamping: 2, initialSpringVelocity: 2, animations: {

            cell.frame = self.theIssues.bounds
            self.theIssues.isScrollEnabled = false
            cell.superview?.bringSubview(toFront: cell)

            print("d")



        }, completion: nil)
    }

2 个答案:

答案 0 :(得分:1)

替换

  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! whyCollectionViewCell

with cellForItem

  let cell = collectionView.cellForItemAtIndexPath(indexPath)

答案 1 :(得分:1)

dequeueReusableCell应该用于为数据源中的项创建单元格,而不是用于获取可见单元格。要获取可见单元格,请使用cellForItem(由if let初始化,因为它可以返回零值 - 在您的情况下不应该发生,但让我们使用最佳做法):

if let cell = collectionView.cellForItem(at: indexPath) as? whyCollectionViewCell {
    UIView.animate(withDuration: 1, delay: 0.1, usingSpringWithDamping: 2, initialSpringVelocity: 2, animations: {

        cell.frame = self.theIssues.bounds
        self.theIssues.isScrollEnabled = false
        cell.superview?.bringSubview(toFront: cell)

        print("d")

    }, completion: nil)
}

但是我知道我强烈建议你不要弄乱单元格的框架(cell.superview?.bringSubview(toFront: cell)也非常可疑) - 这是tableView的责任。特别是因为你将框架设置为边界 - 这将弄乱单元格的原点,而不仅仅是它的边界。

如果你想做一些效果,我宁愿为单元格的内容设置动画(你负责布局),或者我甚至会考虑拍摄单元格的快照并为其制作动画。当然,所有这些都取决于你想要达到的目标。