我有一个视图控制器,它可以分割到第二个视图控制器,它可以加载多个图像但是在从第一个VC到第二个VC之间挂起一两秒钟。我试图添加一个UIActivityIndicatorView,以便用户不认为应用程序被冻结(这是当前的感觉)。但是我似乎无法让它正常工作,我看到的所有示例都使用Web视图或从服务器访问某种数据,而我正在加载存储在应用程序中的图像。
我在下面有一些代码来展示我的尝试。
.h文件
@interface SecondViewController: UIViewController
@property (strong, nonatomic) UIActivityIndicatorView *indicator;
.m文件
-(void)viewWillAppear:(BOOL)animated
{
self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.indicator.center = CGPointMake(160, 240);
[self.view addSubview:self.indicator];
//Loading a lot of images in a for loop.
//The images are attached to buttons which the user can press to bring up
//an exploded view in a different controller with additional information
[self.indicator startAnimating];
for{....}
[self.indicator stopAnimating];
}
我已经尝试在调用dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
后立即使用[self.indicator startAnimating]
,但所有发生的事情是视图控制器立即加载并且图像/按钮从未加载。
当用户点击第一个视图控制器上的“下一个”按钮时,如何摆脱延迟?应用程序挂起第一个VC大约一两秒钟,然后最终加载第二个视图控制器与所有图像/按钮。我是否需要将UIActivityIndicatorView
添加到第一个视图控制器中,或者我是否完全以错误的方式进行此操作?我很乐意接受任何和所有方法来完成这项工作,提前谢谢。
答案 0 :(得分:1)
您需要在下一个运行循环中调用初始化代码并stopAnimating。您可以做的一件容易的事情如下:
-(void)viewWillAppear:(BOOL)animated
{
self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.indicator.center = CGPointMake(160, 240);
[self.view addSubview:self.indicator];
//Loading a lot of images in a for loop.
//The images are attached to buttons which the user can press to bring up
//an exploded view in a different controller with additional information
[self.indicator startAnimating];
[self performSelector:@selector(loadUI) withObject:nil afterDelay:0.01];
}
-(void) loadUI {
for{....}
[self.indicator stopAnimating];
}
当然还有其他方法可以在下一个运行循环中运行loadUI(例如使用计时器)。