我有一个视图控制器,可以连接到第二个视图控制器,该控制器加载多个图像,但是在从第一个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
添加到第一个视图控制器,还是完全以错误的方式进行操作?我愿意接受任何和所有方法来完成此任务,谢谢。 最佳答案
您需要在下一个运行循环中调用初始化代码和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(例如使用计时器)。
关于ios - 切换 View Controller 时显示UIActivityIndicatorView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22677831/