我正在开发一个iOS应用,它在一个视图中有一个UITableView
,其中包含两个自定义UITableViewCell
。所有这些都使用了主要的故事板。
一切都很好。但我需要实现的是从 只有一个 单元格中的一个UIView
中的单个淡入/淡出动画。
目前我正在使用此代码为视图设置动画:
[UIView animateWithDuration:1.2
delay:0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut animations:^{
self.myView.alpha = 0;
} completion:^(BOOL finished) {
self.myView.alpha = 1;
}];
我在tableView:cellForRowAtIndexPath:
的{{1}}数据源方法中调用的“设置内容”方法。
动画效果很好。即使视图之间的变化,视图仍然是动画。我的问题是当我从表视图重新加载数据或表视图向上或向下滚动,直到带有动画的单元格消失,并且它必须重新使用单元格再次显示它,在那一刻,单元格没有动画。
我在这里想念的是什么?有没有更好的方法来实现这个?在表视图重用单元格后如何重新启动动画?
我认为重要的是要注意,根据我的UI设计,只有一个单元格会有动画。
感谢。
答案 0 :(得分:15)
我认为你应该再实施一个delegate
UITableView
方法,这是 -
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
&安培;在其中相应单元格的相应视图上执行动画。
每次显示单元格时都会调用以下方法(如果它离开TableView的框架并返回可见区域,也会调用
)-(void) tableView:(UITableView *) tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
//row number on which you want to animate your view
//row number could be either 0 or 1 as you are creating two cells
//suppose you want to animate view on cell at 0 index
if(indexPath.row == 0) //check for the 0th index cell
{
// access the view which you want to animate from it's tag
UIView *myView = [cell.contentView viewWithTag:MY_VIEW_TAG];
// apply animation on the accessed view
[UIView animateWithDuration:1.2
delay:0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut animations:^
{
[myView setAlpha:0.0];
} completion:^(BOOL finished)
{
[myView setAlpha:1.0];
}];
}
}
答案 1 :(得分:-1)
与 swift 4 一样,您可以使用此动画
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.alpha = 0
cell.layer.transform = CATransform3DMakeScale(0.5, 0.5, 0.5)
UIView.animate(withDuration: 0.4) {
cell.alpha = 1
cell.layer.transform = CATransform3DScale(CATransform3DIdentity, 1, 1, 1)
}
}
答案 2 :(得分:-1)
使用UIView
动画。在Swift 4中可用。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.alpha = 0
UIView.animate(withDuration: 0.3, animations: {
cell.alpha = 1
})
}