我在我的应用程序中使用单个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在动画之前重绘。希望这有帮助