大型 UIImage 绘制矩形选择速度极慢

发布于 2024-09-19 04:38:45 字数 1894 浏览 4 评论 0原文

我有一个自定义 UITableView 单元格,其中包含图像和标题。我使用了 atebits 中 ABTableViewCell 的快速滚动示例。

看来当我选择第一行(这是我的具有最大图像的行)时,需要花费相当多的时间来突出显示该行,然后推送新的视图控制器。

然而,当我选择任何其他行时,图像要小得多,它几乎是即时的。

我尝试使用 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]];
 }
}

编辑: 我可以做些什么来加快速度吗?我正在缓存图像并读取它。

I have a custom UITableView cell that sports an Image, and a headline. I used the fast scrolling example of ABTableViewCell from atebits.

It seems when I select the first row (which is my row with the largest image) it takes a considerable amoun of time to highlight the row, and then push the new view controller.

However when I select any of the other rows, with much smaller images, its almost instant.

Ive attempted to draw the picture using CGContextDrawImage and drawInRect but both yield the same results.

- (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]];
 }
}

EDIT:
IS there anything I can do to speed this up? I am caching the image and reading it as well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

聚集的泪 2024-09-26 04:38:45

我意识到我在第一行使用了非常大的图像版本,在从网络服务器中拉取它之前我能够将其缩小,这极大地提高了性能。注意:仔细检查您的尺寸是否很大。 IE: 2184x1456 哈哈

I realized I was using a very very large version of the image for my first row, I was able to scale it down before I pulled it from the webserver and this vastly improved performance. NOTE: double check your dimensions are not huge. IE: 2184x1456 hahah

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文