##iOS TableView动画效果
- 在willDisplayCell这个Delegate里,去实现刷新时候cell时,alpha的值变化。但是存在一个问题就是当你reload次数太多的时候,整个界面的动画会出现得特别频繁。
- 在reload的时候实现动画。这个方法有两种方案,第一个就是直接创建一个tableView的子类,继承自UITableView,然后override reloadData这个方法。在里面加自己的动画。第二个方案就是不用写子类,在reloadData的时候,使用UIView Animation去实现
下面记录几个动画
CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.fillMode = kCAFillModeForwards;
transition.duration = 0.5;
transition.subtype = kCATransitionFromBottom;
[[self.tableView layer] addAnimation:transition forKey:@"UITableViewReloadDataAnimationKey"];
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
cell.layer.transform = CATransform3DMakeScale(0.5, 0.5, 1);
[UIView animateWithDuration:0.7 animations:^{
cell.layer.transform = CATransform3DMakeScale(1, 1, 1);
}];
}
- (void)viewDidLoad{
[self.tableView reloadData];
self.cellArray = self.tableView.visibleCells;
// 延迟
CGFloat delay =0.05;
for (UITableViewCell *cell in self.cellArray) {
cell.transform = CGAffineTransformMakeTranslation(0, self.view.bounds.size.height);
}
for (int i = 0; i<self.cellArray.count; i++) {
UITableViewCell *cell = self.cellArray[i];
CGFloat cellDelay = delay *i;
[UIView animateWithDuration:1.0 delay:cellDelay usingSpringWithDamping:0.5 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseIn animations:^{
cell.transform = CGAffineTransformMakeTranslation(0, 0);
} completion:^(BOOL finished) {
}];
}
}