3

我正在使用 SVProgressHUD 类(https://github.com/samvermette/SVProgressHUD),我有一个主视图控制器,上面有一个按钮,它使用 segue 推送与另一个视图控制器连接。在主视图控制器中,我添加了以下代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   [SVProgressHUD showWithStatus:@"Loading"];
   NSLog(@"segue test");
}

我想要做的是,在加载其他视图控制器之前,需要显示 HUD。如果我运行我的程序,它首先打印出 NSLog “segue test”,然后从另一个 View Controller 打印出 NSLog,问题是当按下按钮时 HUD 不直接显示,当另一个视图控制器已加载...

这就是我现在所拥有的:

http://i47.tinypic.com/jphh0n.png

http://i50.tinypic.com/vzx16a.png

这就是我需要的:

http://i45.tinypic.com/2vcb1aw.png

蓝屏加载后,“正在加载”HUD 需要消失。

4

1 回答 1

3

您可以从视图控制器类连接segue,而不是直接从按钮连接segue。确保你给 segue 一个名字,因为你需要这个名字,这样你以后可以调用它。

然后,您可以将您的按钮连接到IBAction第一个,该按钮将首先加载您正在加载的内容。加载完成后,您可以关闭进度 HUD 并调用 segue。

- (IBAction)loadStuff:(id)sender
{
    [SVProgressHUD showWithStatus:@"Loading"];
    [self retrieveStuff];
}

- (void)retrieveStuff
{
    // I'll assume you are making a NSURLConnection to a web service here, and you are using the "old" methods instead of +[NSURLConnection sendAsynchronousRequest...]
    NSURLConnection *connection = [NSURLConnection connectionWith...];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // Do stuff with what you have retrieved here
    [SVProgressHUD dismiss];
    [self performSegueWithIdentifier:@"PushSegueToBlueScreen"
           sender:nil];
}

如果你只想先模拟会发生什么,你可以试试这个:

- (IBAction)loadStuff:(id)sender
{
    [SVProgressHUD showWithStatus:@"Loading"];
    [self retrieveStuff];
}

- (void)retrieveStuff
{
    [NSTimer scheduledTimerWithTimeInterval:2 // seconds
                                     target:self
                                   selector:@selector(hideProgressHUDAndPush)
                                   userInfo:nil
                                    repeats:NO];
}

- (void)hideProgressHUDAndPush
{
    // Do stuff with what you have retrieved here
    [SVProgressHUD dismiss];
    [self performSegueWithIdentifier:@"PushSegueToBlueScreen"
                              sender:nil];
}

编辑:您可以尝试使用此 GCD 块下载单个图像。我认为您可以对此进行修改,以便支持下载多个图像。

- (IBAction)loadStuff:(id)sender
{
    [SVProgressHUD showWithStatus:@"Loading"];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
                   ^{
                        // ... download image here
                        [UIImagePNGRepresentation(image) writeToFile:path
                                                          atomically:YES];

                        dispatch_sync(dispatch_get_main_queue(),
                                      ^{
                                            [SVProgressHUD dismiss];
                                            [self performSegueWithIdentifier:@"PushSegueToBlueScreen"
                                                                      sender:nil];
                                       });
                    });
}
于 2013-03-22T09:26:07.597 回答