UIActivityIndicatorView

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添加到第一个视图控制器,还是完全以错误的方式进行操作?我愿意接受任何和所有方法来完成此任务,谢谢。

最佳答案

您需要在下一个运行循环中调用初始化代码和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 时显示UIActivityIndi​​catorView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22677831/

10-15 20:14