什么时候UIView刷新了?是否有可能强制进行中功能刷新?

时间:2012-07-18 00:03:07

标签: objective-c xcode uiview refresh

我在我正在使用的应用程序中有一个功能,与其他操作相比,有时需要相当长的时间。我希望在执行该功能时显示一个图像,以向用户显示该应用程序仍在正常工作。

我可以这样做的方式是:

_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'弹出窗口?

2 个答案:

答案 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
});