Как повысить производительность при использовании UIWebView в ячейках табличного представления? - PullRequest
0 голосов
/ 02 декабря 2010

Я создаю приложение, которое использует веб-сервис. И извлекает список пользователей и там такие детали, как изображения, идентификатор пользователя и их имена. Я отображал всю информацию, связанную с пользователями, в табличном представлении, таким образом, каждая ячейка вв табличном представлении есть изображение для таблиц for.Я использую пользовательский класс ячеек для создания отдельных ячеек.Выбор любой строки в таблице представляет подробный вид (с использованием навигации), который показывает увеличенное изображение и все детали, связанные с конкретным выбранным пользователем.

в классе пользовательских ячеек и подробном представлении. Я использую веб-представление для отображения изображения.,Но когда я запускаю приложение, изображения немного задерживаются для отображения, и то же самое происходит с подробным представлением.

Есть ли какая-либо альтернатива, чтобы я мог улучшить производительность представления таблицы, чтобы у меня было гладкоепрокрутка табличного представления без какой-либо задержки в загрузке изображения и подробного представления ??вот код ...

- (UITableViewCell *)tableView:(UITableView *)tableView 
            cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier ";

CustomCell *cell = (CustomCell *)[tableView 
                                  dequeueReusableCellWithIdentifier: CustomCellIdentifier];
if (cell == nil)  
{

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil ];
    //cell = [[CustomCell alloc] initwi ];
    for (id oneObject in nib)
        if ([oneObject isKindOfClass:[CustomCell class]])
           cell = (CustomCell *)oneObject;

}
NSUInteger row = [indexPath row];
NSString *imageName = [imgArray objectAtIndex:row];
NSString *completeImageUrl = [[NSString alloc] initWithFormat:@"http://122.160.153.166:201/%@", imageName];

NSURL *url = [NSURL URLWithString:completeImageUrl];
//NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:imageData];     /// check to see if we are getting all the arrays such as image array and userId array and name array of same size..
if(image == nil)
{

}
cell.imgView.image = image;                             /// other wise an execption of out out array range will be shown

[image release];
[imageName release];

//[cell.webView initWithFrame:CGRectZero];
//[cell.webView loadRequest:requestObj];
//cell.webView.frame = CGRectMake(20, 0, 80.0, 64);
cell.userIdLabel.text = (NSString *)[userId objectAtIndex:row];
cell.nameLabel.text = (NSString *)[userName objectAtIndex:row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;

} `

Я думаю, что проблема может быть в массиве imgArray, так как я устанавливаю его из другого класса.Где я запрашиваю веб-сервис и получаю все данные о пользователях.

Любая помощь очень ценится.Заранее спасибо

Ответы [ 6 ]

2 голосов
/ 02 декабря 2010

У меня такая же проблема. Для этого я использовал EGOImageCache и кое-что еще. Найти этот URL для EGOImage

Загрузка файлов с этими именами начинается с "EGO" и добавьте их в ваш проект.

и напишите следующий код, куда вы хотите поместить изображение:

EGOImageView *imgView = [[EGOImageView alloc] initWithFrame:CGRectMake(50,50,220,360)];
NSString *imageName = [imgArray objectAtIndex:row];
NSString *completeImageUrl = [[NSString alloc] initWithFormat:@"http://122.160.153.166:201/%@", imageName];

NSURL *url = [NSURL URLWithString:completeImageUrl];

imgView.imageUrl = url;

[self.view addSubView:imgView];

Вот и все. Используйте подобный код, где бы вы ни хотели изображение. При первой загрузке изображения потребуется некоторое время. Но позже он будет кэшировать изображение и использовать его в следующий раз.

1 голос
/ 02 декабря 2010

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

Для этогоответ Ленивая загрузка изображений в ячейках

Вы можете реализовать отложенную загрузку на webviewDidLoad, которая показывает, что веб-просмотр полностью загружен

0 голосов
/ 02 декабря 2010

хорошо, наконец, я удалил представление uiweb из моего приложения и использовал представление Imaged и добился успеха.Я использовал ссылку, предоставленную разработчиком твиттера.здесь это текст ссылки

я использовал класс ABTableViewCell и создал всю ячейку, используя код.Прокрутка была очень резкой, когда я запустил приложение.после применения почти 4 часов и с помощью отложенной загрузки я смог без проблем запустить мое приложение.Я сохранил данные, которые извлекаются из URL, в массив, а затем применил концепцию в tableView: cellForRowAtIndexPath: метод ..

Спасибо вам, ребята, за помощь мне ...

0 голосов
/ 02 декабря 2010

Почему вы используете веб-просмотр для отображения изображений.Вместо этого следует использовать ImageView.Если вы получаете изображения с сервера, вы должны получить их в отдельном потоке, а после получения изображений вы должны перезагрузить эту конкретную строку.

Некоторый фрагмент кода выглядит следующим образом:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
    ...
    ...
    UIImage *img = (UIImage *)[imagesArray objectAtIndex:indexPath.row];
    if(img == nil){
        [imgView setImage:temporaryImage];
        [NSThread detachNewThreadSelector:@selector(getTheThumnbails:) toTarget:self withObject:indexPath];
    }
    else 
      [imgView setImage:img];

для получения дополнительной помощи посмотрите на это

Надеюсь, это поможет.

Спасибо,

Madhup

0 голосов
/ 02 декабря 2010

Использование UIWebView для отображения одного изображения является излишним. Вы должны использовать NSURLConnection (или одну из множества альтернативных HTTP-оболочек / библиотек) для загрузки данных изображения и UIImageView для отображения их в каждой ячейке таблицы. По моему опыту, при использовании UIWebView.

нет способа (или, по крайней мере, не существует простого способа) устранить задержку рендеринга.
0 голосов
/ 02 декабря 2010

Three20 имеет класс ячейки табличного представления с расширенным текстом (я думаю, TTStyledTextTableCell) - должен отображаться значительно быстрее, чем встроенный UIWebView. Вы также можете бросить свой собственный, хотя это займет намного больше времени.

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