Iphone 为什么不是';我的ImageView没有做任何事情,至少是重画?
我制作了一个函数,可以循环浏览图像(1.png、2.png、3.png、4.png、5.png),并将它们显示到UIImageView中。我的想法是,我正在加载一个网页,我希望这个imageview通过这个函数运行,基本上作为一个加载图标。但是我不明白为什么它不工作,就imageview而言,我什么也看不到。请帮忙!我的函数代码如下。我知道我在这里做的有些不对劲,因为我测试的所有其他东西,包括webview代理,都工作得很好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_
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周围放置第二个块。我仍然感谢您抽出时间