我想在第一次显示时只为@Input() previousurl: string;
动画一次。
我的代码:
UITableViewCell
动画效果很好,但问题是,当用户向上滚动方向时,由于重复使用了单元格,动画也会执行。那看起来并不好。
我想为每个单元格显示动画一次,我该如何实现?
答案 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
})
}