У меня есть несколько больших изображений в сгруппированном UITableView.В каждом разделе есть 1 строка, которая содержит изображение, и для каждого раздела об изображении есть связанный текст заголовка и нижнего колонтитула.Я упорно трудился, чтобы получить его для прокрутки гладко является iPhone OS 3.x и, наконец, удалось.Но ... когда я обновился до iOS 4, все изменилось.Теперь при загрузке новой ячейки производительность становится очень резкой.Вот мой код cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";
UIImageView *photo;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
ApplicationDelegate *appDelegate = (ApplicationDelegate *)[[UIApplication sharedApplication] delegate];
NSString *fileName = [NSString stringWithFormat:@"%@",[[appDelegate.sectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"MainTrackImage"]];
UIImage *theImage = [UIImage imageNamed:[[appDelegate.sectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"MainTrackImage"]];
imageHeight = CGImageGetHeight(theImage.CGImage);
imageWidth = CGImageGetWidth(theImage.CGImage);
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
photo = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, (imageHeight*320)/imageWidth)] autorelease];
photo.tag = PHOTO_TAG;
[cell addSubview:photo];
} else {
photo = (UIImageView *) [cell viewWithTag:PHOTO_TAG];
[photo setFrame:CGRectMake(0, 0, 320, (imageHeight*320)/imageWidth)];
}
photo.image = theImage;
return cell;
}
Примечание. Я попытался использовать следующий метод вместо метода imageNamed безуспешно:
UIImage *theImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", bundlePath,fileName]];
Я дажепробовал предварительно кэшировать изображения, но безуспешно.Любая помощь будет принята с благодарностью.
ОБНОВЛЕНИЕ: я попытался поэкспериментировать с использованием Grand Central Dispatch для загрузки изображений, создав очередь изображений и загрузив их асинхронно:
dispatch_async(_image_queue, ^{
photoImageView.image = [imageCacheNS objectForKey:imageString];});
ПроблемаЯ получаю, что изображения загружаются очень медленно, и когда я прокручиваю таблицу, ранее просмотренные изображения отображаются в течение нескольких секунд, пока не загрузится новое изображение.
ОБНОВЛЕНИЕ 2: Я все еще не смогчтобы сделать эту работу.Сейчас я изучаю использование метода drawRect для рисования ячейки.Я надеюсь, что это улучшит производительность прокрутки.Пример кода # 5 AppleView tableViewSuite показывает, как это сделать, но у меня возникают проблемы с поиском того, как заставить это работать для моего проекта.У кого-нибудь есть опыт использования drawRect: для загрузки изображений в таблицу?
Спасибо!