我有细胞的表视图。在我的单元格中,我有一个宽度等于0的初始约束视图。在CellForRow ..方法中,我更新了如下约束:
filledAreaWidth = viewModel.percentageFilled * cellWIdthCalculated
self.layoutIfNeeded()
self.filledAreaView.snp.updateConstraints({ (make) in
make.width.equalTo(self.filledAreaWidth)
})
UIView.animate(withDuration: 0.65, animations: {
self.layoutIfNeeded()
})
因此,它会改变宽度的变化,看起来像是从左到右的彩色条形图。
问题是,当我滚动表格时,它每次都会为它设置动画。我不想为已经创建的单元格设置动画,仅为新单元设置动画。
答案 0 :(得分:2)
//Edit Add this before
let shownIndexes:[IndexPath] = []
if (![self.shownIndexes containsObject:indexPath]) {
[self.shownIndexes addObject:indexPath];
// Animation code
}
在下面的委托方法中使用上面的方法,它会起作用。加载tableview时只加载一次动画。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath) {
}
答案 1 :(得分:1)
检查区域是否已填满:
productID=1 ,shape=circular , diamterofCircle=5 , lengthofRect=0, widthofRect=0, L1ofTriangle=0, L2OfTriangle=0, L3OfTriangle=0
答案 2 :(得分:0)
保持已显示的单元格数,在行单元格中检查indexPath.row是否小于displayedCount。设displayCount始终是从-1开始显示的单元格的最大值。喜欢这个
var rowsDisplayed = -1
在cellForRow中
if indexPath.row > rowsDisplayed {
animate()
rowsDisplayed = indexPath.row
}
答案 3 :(得分:0)
您可以在viewController中添加[Int:Bool]
字典来处理已经设置动画的单元格,并在tableView中使用willDisplay方法检查并做出反应,如下所示
var animatedCells: [Int:Bool] = [:]
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if(animatedCells[indexPath.row] == nil)
{
animatedCells[indexPath.row] = true
cell.makeYourAnimation()
}
}
您还需要将动画代码传递给单元格实现
希望这有帮助