代码执行顺序?

Code Execution Order?

我正在使用下面的代码从视频中抓取一个农场用作缩略图。这是按预期工作的,但是我的 MBProgressHUD 仅在图像抓取完成后显示,并在一秒钟内在屏幕上闪烁。我已经以相同的方式多次使用 MBPRogressHUD,在代码的开头显示它,并在其他所有操作完成后隐藏,这一直有效,但这次它就像代码 运行 乱码?任何帮助将不胜感激。

这是我按下按钮时调用的方法。

- (IBAction)grabImage:(id)sender {

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.mode = MBProgressHUDModeIndeterminate;
    hud.labelText = @"Grabing Thumbnail";
    [hud show:YES];

    self.imageholder.image = [self grabImageMethod];


    [hud hide:YES];
}

这是用in调用的grab方法

-(UIImage*)grabImageMethod{
   NSURL *vidURL = [NSURL URLWithString:@"http://myserver.com/myfile.mp4"];

    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:vidURL options:nil];
    AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    NSError *err = NULL;
    CMTime time = CMTimeMake(1, 60);
    CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err];
    NSLog(@"err==%@, imageRef==%@", err, imgRef);

    return [[UIImage alloc] initWithCGImage:imgRef];
}

收到 nielsbot 的评论后,我去替换了

[hud show:YES];

self.imageholder.image = [self grabImageMethod];

[hud hide:YES];

[hud showAnimated:YES whileExecutingBlock:^{
    self.imageholder.image = [self grabImageMethod];
}];

现在可以完美运行了。