проблема, когда UIWebView для отображения изображения GIF - PullRequest
3 голосов
/ 16 июля 2011

Я хочу отобразить несколько изображений в виде. Изображения загружаются из интернета и имеют формат 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 Ответ

2 голосов
/ 18 июля 2011

У UIWebView не должно быть проблем с отображением изображений .GIF (как вы доказали в своем тесте).Сломанный значок обычно появляется, когда изображение не найдено по указанному вами URL-адресу.Поэтому может потребоваться проверить URL вашего изображения (открыв URL в любом браузере).

Лично я предпочел бы использовать UIScrollView с UIImageViews в нем.UIWebViews, как правило, загружаются и отображаются довольно медленно.И если вы хотите реагировать на действия пользователя над изображениями, у UIWebView есть еще один недостаток: вам нужно реализовать некоторую обработку событий javascript, и есть небольшая, но заметная задержка, когда пользователь нажимает на одно из изображений внутри UIWebView.Если вы идете дальше и хотите добавить в свои изображения пролистывание или другое распознавание жестов, вам нужно импортировать библиотеку javascript, которая это делает.Если вам не нужно взаимодействие пользователя с вашими изображениями, то эти недостатки не учитываются в вашем случае.С другой стороны, использование UIWebView весьма удобно, поскольку оно автоматически загружает свой контент асинхронно.

Решение UIScrollView с UIImageViews делает обработку взаимодействия с пользователем очень простой.Просто добавьте UIGestureRecognizer к вашим изображениям, и все готово.С другой стороны, если у вас много изображений или больших изображений, вы не можете загрузить их все одновременно, или вы столкнетесь с предупреждениями в памяти.Поэтому вам, возможно, придется добавить некоторую логику, чтобы загружать только те изображения, которые отображаются в данный момент, и освобождать те, которые не отображаются.Вам также необходимо реализовать асинхронную загрузку для ваших изображений, чтобы не блокировать прокрутку во время загрузки изображений.

Если все ваши изображения имеют одинаковый размер, вы можете использовать UITableView для отображения изображений и использовать его встроенныйповторное использование ячеек таблицы для уменьшения объема памяти.Вы все еще должны реализовать асинхронную загрузку.

В любом случае, я думаю, что в этом случае нет правильных или неправильных.Если вам не нужно взаимодействие с пользователем, пойте, UIWebView проще и быстрее реализовать, но IMHO, UIScrollView / UITableView по-прежнему будет иметь лучший пользовательский интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...