切换视图控制器时显示UIActivityIndi​​catorView

时间:2014-03-27 03:42:52

标签: ios uiactivityindicatorview

我有一个视图控制器,它可以分割到第二个视图控制器,它可以加载多个图像但是在从第一个VC到第二个VC之间挂起一两秒钟。我试图添加一个UIActivityIndi​​catorView,以便用户不认为应用程序被冻结(这是当前的感觉)。但是我似乎无法让它正常工作,我看到的所有示例都使用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添加到第一个视图控制器中,或者我是否完全以错误的方式进行此操作?我很乐意接受任何和所有方法来完成这项工作,提前谢谢。

1 个答案:

答案 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(例如使用计时器)。