swift UITableview单元格动画只播放一次

yrefmtwq  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(123)

我只想在UITableViewCell第一次显示时为其设置一次动画。
我的代码:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    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
    })
}

字符串
动画效果很好,但问题是,当用户向上滚动时,动画也会执行,因为单元格被重用。这看起来不太妙
我想为每个单元格显示动画一次,如何实现?

iyr7buue

iyr7buue1#

您需要记录单元格的动画是为您可以维护一个数组...
为此创建属性。

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
        })
        
        arrIndexPath.append(indexPath)
    }
}

cnh2zyt3

cnh2zyt32#

你可以在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
    self.cellAnimationsFlags[indexPath.row] = true

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

相关问题