Iphone 为什么不是';我的ImageView没有做任何事情,至少是重画?

Iphone 为什么不是';我的ImageView没有做任何事情,至少是重画?,iphone,ios,multithreading,ipad,webview,Iphone,Ios,Multithreading,Ipad,Webview,我制作了一个函数,可以循环浏览图像(1.png、2.png、3.png、4.png、5.png),并将它们显示到UIImageView中。我的想法是,我正在加载一个网页,我希望这个imageview通过这个函数运行,基本上作为一个加载图标。但是我不明白为什么它不工作,就imageview而言,我什么也看不到。请帮忙!我的函数代码如下。我知道我在这里做的有些不对劲,因为我测试的所有其他东西,包括webview代理,都工作得很好 dispatch_async(dispatch_get_global_

我制作了一个函数,可以循环浏览图像(1.png、2.png、3.png、4.png、5.png),并将它们显示到UIImageView中。我的想法是,我正在加载一个网页,我希望这个imageview通过这个函数运行,基本上作为一个加载图标。但是我不明白为什么它不工作,就imageview而言,我什么也看不到。请帮忙!我的函数代码如下。我知道我在这里做的有些不对劲,因为我测试的所有其他东西,包括webview代理,都工作得很好

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    for(int c = 1; !webviewLoaded; c++)
    {
        c = c % 6;
        if(c == 6)
            c = 1;
        NSString *numberString = [NSString stringWithFormat:@"%d.png", c];
        UIImage *img = [UIImage imageNamed:numberString];
        [self.loadingImage setImage:img];
        sleep(1);
    }
});

因为您是在后台线程上执行UI操作,所以不应该从后台线程更改UI组件

您可以按以下方式更改代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  dispatch_async(dispatch_get_main_queue(), ^{
    for(int c = 1; !webviewLoaded; c++)
    {
        c = c % 6;
        if(c == 6)
            c = 1;
        NSString *numberString = [NSString stringWithFormat:@"%d.png", c];
        UIImage *img = [UIImage imageNamed:numberString];
        [self.loadingImage setImage:img];
        sleep(1);
    }
  }
});
这段代码可以工作,但有点无用,它会给您带来不如预期的结果,因为您要做的是创建一个单独的线程(操作),只是从中调用UI线程,这是没有效率的

您应该做的是完全删除分派,如下所示:

   for(int c = 1; !webviewLoaded; c++)
    {
            c = c % 6;
            if(c == 6)
                c = 1;
            NSString *numberString = [NSString stringWithFormat:@"%d.png", c];
            UIImage *img = [UIImage imageNamed:numberString];
            [self.loadingImage setImage:img];
            sleep(1);
    }
这也会起作用,但请确保已将这些文件
@“%d.png
添加到项目中


因为您不熟悉GCD,这里有一个

您应该阅读UIImageView上的文档。它内置了动画。@MarcusAdams是的,他可以,但他发布了一段代码,我不知道他是如何使用它的,所以我发布了一个代码解决方案,但从我认为他正在尝试做的事情来看(只需从项目中加载一些图像)不需要任何类型的
调度
,因为对图像或其他计算没有繁重的处理,这就是我添加第二段代码的原因;)感谢您的帮助和资源。仅供参考,您的建议只是部分解决方案。为了使其有效,您需要在正在更改的UI周围放置第二个块。我仍然感谢您抽出时间