UITableview Cell动画只播放一次

时间:2018-03-28 07:45:22

标签: ios swift uitableview animation

我想在第一次显示时只为@Input() previousurl: string; 动画一次。

我的代码:

UITableViewCell

动画效果很好,但问题是,当用户向上滚动方向时,由于重复使用了单元格,动画也会执行。那看起来并不好。

我想为每个单元格显示动画一次,我该如何实现?

2 个答案:

答案 0 :(得分:3)

您需要记录动画完成的单元格,以便维护数组...

为此创建一个属性。

var arrIndexPath = [IndexPath]()

然后执行以下操作:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

if arrIndexPath.contains(indexPath) == false {
        cell.alpha = 0
        let transform = CATransform3DTranslate(CATransform3DIdentity, 0, 200, 0)
        cell.layer.transform = transform

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
            cell.alpha = 1
            cell.layer.transform = CATransform3DIdentity
        })

        arrIndexPth.append(indexPath)
    }
} 

答案 1 :(得分:2)

您可以向ViewController添加一个数组,例如每个单元格都有bool标志。

var cellAnimationsFlags = Array(repeatElement(false, count: yourDataSourceArray.count))

然后检查一下:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if self.cellAnimationsFlags[indexPath.row] {
        return
    }
    cell.alpha = 0
    let transform = CATransform3DTranslate(CATransform3DIdentity, 0, 200, 0)
    cell.layer.transform = transform

    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
        cell.alpha = 1
        cell.layer.transform = CATransform3DIdentity
        self.cellAnimationsFlags[indexPath.row] = true
    })
}