我的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,我最好避免哪些?
答案 0 :(得分:4)
我找到了解决问题的解决方案,但仍然无法相信这应该是stretchchableImageWithLeftCap的正常行为:......
我现在将我的backgroundPicture分为3部分。 - leftCap - middlePart(1px宽度) - rightCap
使用drawAtPoint绘制左右顶盖,使用drawAsPatternInRect绘制middlePart。 绘制这3个缓存的图像或多或少与原始的完整背景图像一样快。
但我一直认为stretchableImageWithLeftCap会做同样的事情:绘制2个Caps和1px之间的模式。 不知道为什么对我这么慢。