【发布时间】:2011-10-31 13:39:37
【问题描述】:
我的 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];
}
这个性能真的那么差,还是这里有什么问题? 在 iPhone 4 上测试过,所以通常应该足够强大。 :-/
我已经考虑过缓存正确大小的图片而不是可拉伸的图片, 并在屏幕旋转后使用新尺寸重新创建它。
但我知道很多应用程序使用单元格背景图像和不同的单元格高度(例如 Twitter 又名 Tweetie)并且滚动速度仍然惊人。
那么,它通常应该更好地工作,还是我最好避免使用stretchableImageWithLeftCapWidth?
【问题讨论】:
-
我对自定义单元格背景不是很熟悉,但是需要这个手动绘图吗? UIView 中没有背景图像属性吗?另外,缓存听起来很不错,如果没有其他方法,我会尝试使用自定义绘图功能。
-
是的,要绘制的元素很多,用缓存对象自己绘制后的性能确实更好。只是stretchableImage 是问题所在。如您所见,可拉伸图像本身已经被缓存(静态指针和保留)。但如果没有其他解决方案,我将改为缓存最终图像。我只是想知道其他应用程序是如何做到的。与此单个可拉伸图像相比,整个单元格的其余部分(3 个字符串,5 个其他(不可拉伸)图像)的绘制时间不到一半:-/
标签: iphone objective-c