使用动画刷新 UITableView



我在我的应用程序中使用单个UITableView。 我根据行选择等更改 UITableView 的委托和数据源。

为了在用户四处移动时对过渡进行动画处理,我获取当前UITableView的图像,将图像放置在UITableView顶部的UIImageView中,重新加载UITableView上的数据,然后在动画过渡中删除UIImageView。

代码如下:

-(void)showImageEditPageWithImageId:(NSString*)imageId
{
    UITableView* tableview = (UITableView*)[self.view viewWithTag:VIEWTAG_P1_MAINTABLEVIEW];
    UIImage* image = [HPSImageHelper imageWithView:tableview];
    UIImageView* imageView = [[UIImageView alloc] initWithFrame:tableview.frame];
    imageView.tag = 336611;
    imageView.layer.borderWidth=1;
    imageView.layer.borderColor = [UIColor blueColor].CGColor;
    [imageView setImage:image];
    _tableViewController = [[HPSImageEditTableViewController alloc] initWithImageId:imageId];
    ((HPSImageEditTableViewController*)_tableViewController).callingController = self;    
    tableview.dataSource = _tableViewController;
    tableview.delegate = _tableViewController;
    [tableview reloadData];
    [tableview.superview addSubview:imageView];
    [NSTimer scheduledTimerWithTimeInterval:0.1
                                     target:self
                                   selector:@selector(removeCoveringImage)
                                   userInfo:nil
                                    repeats:NO];
}
-(void)removeCoveringImage
{
    UIView* imageView = [self.view viewWithTag:336611];
    [UIView transitionWithView:imageView
                      duration:0.9
                       options:UIViewAnimationOptionTransitionCurlUp
                    animations:^{
                        //Nothing here
                    }
                    completion:^(BOOL finished){
                        [imageView removeFromSuperview];
                    }
     ];
}

问题是,UITableView 仅在过渡完成后在视觉上刷新自己,因此新视图突然跳入视野。

在我看来,UITableView并没有刷新自己,因为它"知道"它实际上不可见。

这是正在发生的事情吗?如果是这样,我如何让 UITableView 重新绘制,即使它被 UIImageView 覆盖?

谢谢。

加载数据后,尝试在表视图上调用 setNeedsDisplay。如果这没有帮助,请尝试将UIViewAnimationOptionLayoutSubviews选项添加到动画中。如果这些帮助,请尝试仅稍微降低图像视图的alpha(0.99或0.98或0.90),以强制tableView在动画之前重绘。希望这有帮助

最新更新