我在我正在使用的应用程序中有一个功能,与其他操作相比,有时需要相当长的时间。我希望在执行该功能时显示一个图像,以向用户显示该应用程序仍在正常工作。
我可以这样做的方式是:
_checkImpossibleImage.hidden = NO;
bool ratioIsPossible = [PaintGame isPossible:_paintChipRatio:_paintCanRatios];
_checkImpossibleImage.hidden = YES;
实质上,它会将图像设置为可见,执行该功能,然后将图像设置为不可见。但是,在执行本节中的所有代码之前,视图似乎不会更新。以下是整体功能:
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0){
// Do nothing (cancel option selected)
} else {
if (_buttonKey == @"New") {
_checkImpossibleImage.hidden = NO;
bool ratioIsPossible = [PaintGame isPossible:_paintChipRatio:_paintCanRatios];
_checkImpossibleImage.hidden = YES;
...
}
...
}
}
有没有办法强制更新当前视图,还是有更好的方法在函数执行时创建'loading'弹出窗口?
答案 0 :(得分:0)
在执行此操作时,您不应该阻止UI,我认为如果您在单独的线程中调用花费很长时间的方法会更好。
答案 1 :(得分:0)
直到运行循环结束才会进行绘图;没有办法在代码中间实现它。您可以将调用延迟到isPossible::
(顺便说一下,这是一个糟糕的方法名称),直到循环的下一次复制为止,将它放在主调度队列上:
_checkImpossibleImage.hidden = NO;
dispatch_async(dispatch_get_main_queue(), ^{
bool ratioIsPossible = [PaintGame isPossible:_paintChipRatio:_paintCanRatios];
_checkImpossibleImage.hidden = YES;
// More code to deal with the value of ratioIsPossible
});