我有10个链接到我网站图片的网址。
我正在使用SDWebImages进行异步图像下载,并使用for循环来运行URL数组。但是代码只能在下载第一张图像之前通过For-loop运行。因此,其余图像永远不会被下载,并且永远不会显示新的视图控制器
如何允许代码通过for循环运行,一旦下载了图像,它就会弹出一个视图控制器,并在下载新图像时进行更新。
这是我的代码:
NewViewController *vc = [[NewViewController alloc] initWithNibName:nil bundle:nil];
NavigationController *navigationController = [[NavigationController alloc] initWithRootViewController:vc];
for (NSString *url in urls) {
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
[imageView setImageWithURL:[NSURL URLWithString:url]
placeholderImage:[UIImage imageNamed:@"post-imagePlaceholder"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
item.image = image;
[self.images addObject:item];
vc.results = self.images;
;
}
}];
}
[self presentViewController:navigationController animated:YES completion:nil]
答案 0 :(得分:1)
有几个问题突然发生在我身上:
您正在创建一组新的图片视图,但从不将它们添加到任何视图(例如addSubView
)。
此外,如果这些视图位于NewViewController
,您应该让该控制器执行setImageWithURL
调用(例如,在viewDidLoad
中),而不是当前的视图控制器。当前视图控制器应该只将urls
数组传递给NewViewController
。
最后,您尝试使用图像填充数组,但
你写这篇文章的方式,我想你会期望在新的视图控制器出现之前填充self.images
。但它不会,因为这个completed
块异步发生。
您通常不应该填充图像数组,因为图像需要大量内存。如果您应用中的图片数量增加,您将遇到内存警告。我们通常不应该维护URL数组,让SDWebImage
进行缓存以有效地检索图像。
因此,当前视图控制器应该只传递urls
数组,viewDidLoad
NewViewController
可以遍历这些数组,或者(a)找到适当的现有图像视图'{ {1}}引用并致电IBOutlet
;或(b)创建新的setImageWithURL
,设置各自的UIImageView
和image
/约束,并将该图像视图添加到新视图控制器的视图中。但是不要创建任何frame
数组。
如果并非所有图像视图一次都可见,则应进一步细化上述方法(仅加载可见图像视图的图像)。但希望以上回答了当前的问题。