Большое рисование UIImage чрезвычайно медленное при выделении - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть пользовательская ячейка UITableView с изображением и заголовком.Я использовал пример быстрой прокрутки ABTableViewCell из atebits.

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

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

Я попытался нарисовать картинку, используя CGContextDrawImage и drawInRect, но оба привели к одинаковым результатам.

- (void)drawContentView:(CGRect)r highlighted:(BOOL)highlighted {
 if ([type isEqualToString:@"first"]) {
   CGContextRef context = UIGraphicsGetCurrentContext();
   UIColor *backgroundColor = [UIColor blackColor];
   UIColor *textColor = [UIColor whiteColor];
   UIColor *textBackgroundColor = [[UIColor alloc] initWithWhite:0 alpha:.5];
   UIColor *highlightColor;
   if (highlighted) {
     backgroundColor = [UIColor clearColor];
     textColor = [UIColor blueColor];
     highlightColor = [[UIColor alloc] initWithWhite:0 alpha:.3];
   } else {
     highlightColor = [UIColor clearColor];
   }

   [backgroundColor set];
   CGContextFillRect(context, r);
   [self.picture drawInRect:CGRectMake(0.0, 0.0, 320, 225)];
   [textBackgroundColor set];
   CGContextFillRect(context, CGRectMake(0, 170, 320, 55));  
   [textColor set];

   [self.title drawInRect:CGRectMake(5, 170, 320, 55) withFont:firstHeadlineFont lineBreakMode:UILineBreakModeWordWrap];
   [highlightColor set];
   CGContextFillRect(context, r);
 } else {
   CGContextRef context = UIGraphicsGetCurrentContext();
   UIColor *backgroundColor = [UIColor blackColor];
   UIColor *textColor = [UIColor blueColor];

   if (highlighted) {
     backgroundColor = [UIColor clearColor];
     textColor = [UIColor whiteColor];
   }
   [backgroundColor set];
   CGContextFillRect(context, r);

   CGPoint p;
   p.x = 0;
   p.y = 0;
   [self.picture drawInRect:CGRectMake(0.0, 0.0, 44, 44)];

   [textColor set];
   p.x += 44 + 6; // space between words
   [self.title drawAtPoint:p withFont:[UIFont systemFontOfSize:20]];
 }
}

РЕДАКТИРОВАТЬ: Есть ли что-нибудь, что я могу сделать, чтобы ускорить это?Я кеширую изображение и читаю его.

1 Ответ

0 голосов
/ 15 сентября 2010

Я понял, что я использовал очень очень большую версию изображения для моей первой строки, я смог уменьшить его, прежде чем извлекать его из веб-сервера, и это значительно улучшило производительность.ПРИМЕЧАНИЕ: дважды проверьте ваши размеры не огромны.IE: 2184x1456 хахах

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