当UIWebView显示gif图像时出现问题

时间:2011-07-16 09:27:34

标签: ios uiwebview

我想在视图中显示多个图像。图像从互联网上下载,是gif格式。

这就是我所做的,但只显示默认的破碎图标。

_images是NSArray存储的图像文件路径

NSMutableString *html = [NSMutableString string];

for (NSString *str in _images) {
    [html appendFormat:@"<img src='%@' />", str];
}

[_webView loadHTMLString:html baseURL:nil];

我试过这个并显示图像,所以我相信UIWebView能够显示我的图像。

NSData *data = [NSData dataWithContentsOfFile:[_images lastObject]];
[_webView loadData:data MIMEType:@"image/gif" textEncodingName:@"UTF-8" baseURL:nil];

或者是显示多个图像的其他好方法吗?否则,我可能必须为每个图像创建一个UIImageView并将它们放入滚动视图中。

1 个答案:

答案 0 :(得分:2)

UIWebView在显示.GIF图像时应该没有问题(正如您在测试中所证明的那样)。当您在提供的URL中找不到图像时,通常会显示损坏的图标。因此,可能需要检查您的图片网址(通过在任何浏览器中打开网址)。

就我个人而言,我宁愿使用带有UIImageViews的UIScrollView。 UIWebViews在加载和显示其内容时往往相当慢。如果你想对图像上的用户操作作出反应,UIWebView还有另一个缺点:你需要实现一些javascript事件处理,当用户点击UIWebView中的一个图像时,会有一个短暂但明显的延迟。如果你更进一步,想要在你的图像上添加滑动或其他手势识别,你需要导入一个javascript库来做到这一点。如果您不需要在图像上进行用户交互,那么这些缺点在您的情况下并不重要。另一方面,使用UIWebView非常方便,因为它会自动异步加载它的内容。

UIScrollView与UIImageViews解决方案使用户交互处理变得非常简单。只需将UIGestureRecognizers添加到您的图像中即可。另一方面,如果您有大量图像或大图像,则无法同时加载它们或者您将遇到内存警告。因此,您可能必须添加一些逻辑来仅加载当前显示的图像并释放不可见的图像。您还必须为图像实现异步加载,以便在加载图像时不阻止滚动。

如果您的图像都具有相同的大小,您可以使用UITableView显示图像并使用它的内置表单元格重用来保持较小的内存占用。您仍然必须实现异步加载。

无论如何,我认为在这种情况下没有对错。如果您不需要用户交互,那么UIWebView实现起来更容易,更快,但恕我直言,UIScrollView / UITableView仍将拥有更好的用户体验。