【问题标题】:Refresh UITableView using animation使用动画刷新 UITableView
【发布时间】:2012-09-25 14:39:09
【问题描述】:

我在我的应用程序中使用单个 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 并没有刷新自己,因为它“知道”它实际上并不可见。

这是怎么回事,如果是这样,即使 UIImageView 覆盖了 UITableView,我该如何让它重绘?

谢谢。

【问题讨论】:

    标签: objective-c ios uitableview uiview


    【解决方案1】:

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

    【讨论】:

    • 太棒了 - 选项和 alpha 一起提供了一个很好的解决方案 - 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多