stretchableImageWithLeftCap: - > drawInRect - >非常慢?

时间:2010-12-08 20:51:15

标签: iphone objective-c

我的tableView中有可伸缩图像的问题。 直到今天我使用320px宽度的静态背景图像。

但是,由于我也想支持景观,我想我会切换到可伸缩的图像,而不是使用单独的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];
}

这个表现真的那么糟糕,或者这里有什么问题吗? 在iPhone 4上测试过,因此应该足够强大。 : - /

我已经考虑过缓存正确尺寸的图像而不是伸缩图像, 并在屏幕旋转后使用新尺寸重新创建它。

但是我知道很多应用程序使用单元格背景图像和不同的单元格高度(例如Twitter a.k.a. Tweetie)并且仍然可以快速滚动。

那么,它应该更好地工作,还是伸张的ImageWithLeftCapWidth,我最好避免哪些?

1 个答案:

答案 0 :(得分:4)

我找到了解决问题的解决方案,但仍然无法相信这应该是stretchchableImageWithLeftCap的正常行为:......

我现在将我的backgroundPicture分为3部分。 - leftCap - middlePart(1px宽度) - rightCap

使用drawAtPoint绘制左右顶盖,使用drawAsPatternInRect绘制middlePart。 绘制这3个缓存的图像或多或少与原始的完整背景图像一样快。

但我一直认为stretchableImageWithLeftCap会做同样的事情:绘制2个Caps和1px之间的模式。 不知道为什么对我这么慢。