iOS - TableView willDisplayCell动画仅在用户向下滚动到顶部时才会发生

时间:2016-10-31 05:26:10

标签: ios objective-c uitableview animation tableview

当用户向下滚动时,如果用户滚动到顶部,通常会在没有动画的情况下移动,我将为表视图单元设置动画。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cells forRowAtIndexPath:(NSIndexPath *)indexPath{
    cells.alpha = 0.0;
    [UIView animateWithDuration:0.4 animations:^{
        cells.alpha = 1.0;
    }];
}

我试过这样但动画一直在发生

2 个答案:

答案 0 :(得分:1)

使用Bool属性创建自定义单元格" isAnimated "。默认情况下" isAnimated "价值是" "。

并在willDisplayCell:(UITableViewCell *)cell方法中进行代码更改。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
//Typecast UITableViewCell to CustomCell. ex: CustomCell *objCell = (CustomCell *)cell
// check isAnimated or not 
   if(cell.isAnimated) return;
   cell.alpha = 0.0;
   [UIView animateWithDuration:0.4 animations:^{
      cell.alpha = 1.0;
      cell.isAnimated = YES;
   }];
}

此处单元格引用是自定义单元格引用。我希望这段代码适合你

答案 1 :(得分:0)

UITableView是UIScrollView的子类,UITableViewDelegate符合UIScrollViewDelegate。因此,您附加到表视图的委托将获取scrollViewDidScroll:等事件,您可以在表视图上调用contentOffset等方法来查找滚动位置。

访问apple doc以获取有关UIScrollViewDelegate

的更多信息

使用scrollViewDidScroll方法,然后在那里放置条件以查找滚动方向。向下滚动动画。

可以使用以下代码:

(void)scrollViewDidScroll:(UIScrollView *)scrollView{

    CGPoint offset = aScrollView.contentOffset;
    CGRect bounds = aScrollView.bounds;
    CGSize size = aScrollView.contentSize;
    UIEdgeInsets inset = aScrollView.contentInset;
    float y = offset.y + bounds.size.height - inset.bottom;
    float h = size.height;

    // NSLog(@"offset: %f", offset.y);   
    // NSLog(@"content.height: %f", size.height);   
    // NSLog(@"bounds.height: %f", bounds.size.height);   
    // NSLog(@"inset.top: %f", inset.top);   
    // NSLog(@"inset.bottom: %f", inset.bottom);   
    // NSLog(@"pos: %f of %f", y, h);

    float reload_distance = 10;
    if(y > h + reload_distance) {
       //write your code here to animate
           //cells.alpha = 0.0;
           //[UIView animateWithDuration:0.4 animations:^{
           //cells.alpha = 1.0;
           //}];
    }
}