我有一个tableView,当用户选择其中一个单元格时,即可加载一个大图像。
此加载需要10秒钟,我想显示带有旋转图标的小视图。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
loadingView = [[LoadingHUDView alloc] initWithTitle: NSLocalizedString(@"Loading image",@"")];
[self.view addSubview:loadingView];
[loadingView startAnimating];
loadingView.center = CGPointMake(self.view.bounds.size.width/2, 150);
[imageView loadImage: path];
[loadingView removeFromSuperview];
}
问题是视图(loadingView)从未显示过。似乎对loadImage的调用阻止了它的显示。我可以强制显示该视图吗?
答案 0 :(得分:2)
问题是图像的加载会占用线程,因此不会使用旋转图标更新视图。
你需要使用不同的线程,虽然它仍然变得复杂,因为你无法从后台线程轻松更新视图!
所以你真正需要做的就是在后台线程中开始加载大图像。
将代码加载到另一个方法中,然后在后台线程上运行它,如下所示:
[self performSelectorInBackground:(@selector(loadBigImage)) withObject:nil];
请记住,在你的-loadBigImage方法中,你需要声明一个NSAutorelease池:
-(void)loadBigImage {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//Code to load big image up
[pool drain];
}
当它在后台运行时,您的动画加载图标会显示正常。
希望有所帮助