我想滚动到该行并通过更改背景颜色来闪烁行。
我可以滚动到该行。我使用方法cellForRow(at:)
来获取单元格以供以后修改和动画。但是cell
是零。我不明白为什么它是零,因为我可以滚动到具有相同indexPath
的行。
let indexPath = IndexPath(row: rowIndex, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
let cell = self.tableView.cellForRow(at: indexPath) // return nil.
if let cell = cell { // nil
// animation here.
}
答案 0 :(得分:2)
根据文档,cellForRow(at: indexPath)
返回:
表示表格单元格的对象,如果单元格不可见或indexPath超出范围,则为nil。
当您致电cellForRow(at: indexPath)
时,您的手机尚未显示,因为动画滚动尚未完成。
要跟踪滚动动画完成,您必须实施UITableViewDelegate
协议:
class YourVC : UIViewController, UITableViewDelegate {
override func viewDidLoad() {
// ... your code
self.tableView.delegate = self
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
let cell = self.tableView.cellForRow(at: indexPathToAnimate) // returns your cell object
if let cell = cell {
// animation here.
}
}
}
答案 1 :(得分:0)
如果单元格不可见,您将获得零值。通常,单元格动画在tableview委托willDisplay cell
中执行。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
这是在细胞出现时从左侧为细胞设置动画的代码。您可以通过检查执行动画所需的索引路径来修改和执行所需的动画。
<强>目标C 强>
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
//1. Setup the CATransform3D structure
CATransform3D rotation;
rotation = CATransform3DMakeScale(0, 0, 0);
//2. Define the initial state (Before the animation)
cell.layer.shadowColor = [[UIColor blackColor]CGColor];
cell.layer.transform = rotation;
cell.layer.anchorPoint = CGPointMake(1, 0);
//3. Define the final state (After the animation) and commit the animation
[UIView beginAnimations:@"rotation" context:NULL];
[UIView setAnimationDuration:0.7];
cell.layer.transform = CATransform3DIdentity;
[UIView commitAnimations];
}
Swift 3
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
//1. Setup the CATransform3D structure
let rotation = CATransform3DMakeScale(0, 0, 0)
//2. Define the initial state (Before the animation)
cell.layer.shadowColor = UIColor.black.cgColor
cell.layer.transform = rotation
cell.layer.anchorPoint = CGPoint(x: 1, y: 0)
//3. Define the final state (After the animation) and commit the animation
UIView.beginAnimations("rotation", context: nil)
UIView.setAnimationDuration(0.7)
cell.layer.transform = CATransform3DIdentity
UIView.commitAnimations()
}