iOS TableView动画效果

##iOS TableView动画效果

  1. 在willDisplayCell这个Delegate里,去实现刷新时候cell​时,alpha的值变化。但是存在一个问题就是当你reload次数太多的时候,整个界面的动画会出现得特别频繁。
  2. 在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) {

        }];
}
}