Iphone stretchableImageWithLeftCap:-->drawInRect-->非常慢?

Iphone stretchableImageWithLeftCap:-->drawInRect-->非常慢?,iphone,objective-c,Iphone,Objective C,我的tableView中的可拉伸图像有问题。 直到今天,我还使用了320像素宽的静态背景图像 但由于我也想支持横向,我想我切换到可拉伸图像,而不是使用单独的png文件 我注意到的第一件事是,滚动的性能非常差。 我没有改变其他任何事情 在那之后,我开始了一段时间的测量,并从可拉伸图像旁边的绘图例程中删除了所有内容 与使用与backroundRect大小相同的非拉伸图像相比,drawContentView方法需要10倍的时间。 通过拉伸,很容易看到滞后。没有它,它就像一个符咒 static UIIm

我的tableView中的可拉伸图像有问题。 直到今天,我还使用了320像素宽的静态背景图像

但由于我也想支持横向,我想我切换到可拉伸图像,而不是使用单独的png文件

我注意到的第一件事是,滚动的性能非常差。 我没有改变其他任何事情

在那之后,我开始了一段时间的测量,并从可拉伸图像旁边的绘图例程中删除了所有内容

与使用与backroundRect大小相同的非拉伸图像相比,drawContentView方法需要10倍的时间。 通过拉伸,很容易看到滞后。没有它,它就像一个符咒

static UIImage *greyBackground = nil;

+ (void)initialize
{
  greyBackground = [[[UIImage imageNamed:@"back_gray.png"]stretchableImageWithLeftCapWidth:65.0 topCapHeight:0.0]retain];
}


- (void)drawContentView:(CGRect)r {
  CGRect backgroundRect = contentView.bounds;

  [greyBackground drawInRect:backgroundRect];
}
这场比赛的表现真的那么糟糕吗,还是出了什么问题? 在iPhone4上测试过,所以正常情况下应该足够强大:-/

我已经考虑过缓存正确大小的图像,而不是可拉伸的图像, 并在屏幕旋转后以新的大小重新创建它

但我知道有很多应用程序使用手机背景图像和不同的手机高度,比如Twitter a.k.a.Tweetie,而且滚动速度惊人


那么,它应该正常工作得更好,还是使用LeftCapWidth StretcableImagewithLeftCapWidth是我最好避免的东西?

我找到了解决问题的方法,但仍然不能相信这应该是LeftCap StretcableImagewithLeftCap的正常行为:

我现在把我的背景图片分成三部分。 -左帽 -中间部分1px宽度 -右帽

左右端盖使用drawAtPoint绘制,中间部分使用DrawAsPatterInRect绘制。 绘制这3张缓存图像的速度与我的原始全尺寸背景图像差不多

但我一直认为StretcableImageWithLeftCap也会这样做:在两个瓶盖之间绘制2个瓶盖和1px图案。
不知道为什么它对我来说这么慢。

我找到了解决问题的方法,但仍然不能相信这应该是LeftCap StretcableImages的正常行为:

我现在把我的背景图片分成三部分。 -左帽 -中间部分1px宽度 -右帽

左右端盖使用drawAtPoint绘制,中间部分使用DrawAsPatterInRect绘制。 绘制这3张缓存图像的速度与我的原始全尺寸背景图像差不多

但我一直认为StretcableImageWithLeftCap也会这样做:在两个瓶盖之间绘制2个瓶盖和1px图案。
不知道为什么它对我来说这么慢。

我对自定义单元格背景不太熟悉,但需要手动绘制吗?有没有像UIView中那样的backgroundImage属性?此外,缓存听起来很好,如果没有其他方法,我会尝试使用自定义绘图功能。是的,有很多元素需要绘制,使用缓存对象绘制后的性能确实更好。问题就在于可拉伸图像。可拉伸图像本身已经被缓存,因为您可以看到静态指针和retain。但如果没有其他解决方案,我将切换到缓存最终图像。我只是想知道其他应用程序是如何做到这一点的。与此单个可拉伸图像相比,其余3个单元格字符串、5个其他不可拉伸图像的绘制时间不足一半:-/我不太熟悉自定义单元格背景,但是否需要手动绘制?有没有像UIView中那样的backgroundImage属性?此外,缓存听起来很好,如果没有其他方法,我会尝试使用自定义绘图功能。是的,有很多元素需要绘制,使用缓存对象绘制后的性能确实更好。问题就在于可拉伸图像。可拉伸图像本身已经被缓存,因为您可以看到静态指针和retain。但如果没有其他解决方案,我将切换到缓存最终图像。我只是想知道其他应用程序是如何做到这一点的。与此单个可拉伸图像相比,单元格3字符串、5个其他不可拉伸图像的整个剩余部分在不到一半的时间内绘制:-/