【发布时间】:2010-09-04 19:09:16
【问题描述】:
快速介绍
编辑:我有 9 个单元格。所有 9 个单元格都包含捆绑图像。 7 束图像具有某种透明度(在文件中,而不是作为代码中的混合选项)以从它们下面的网络加载图像。当 bundle 和 web 图像都作为 UIImage 对象加载到数组中时,滚动问题会影响表格视图。
如果我禁用 Web 图像的绘制,滚动是很漂亮的,当我禁用捆绑滚动的图像时,就很好了。但是在一起你会得到你不想拥有的东西:糟糕的用户体验。
实施
我在女巫中使用模型,您有一个自定义 UITableViewCell,其中一个自定义 UIView 设置为 Cell 的 backgroundView .
自定义UIView 包含两个单元格大小的图像(320x80 像素)。所有元素都设置为不透明并具有 1.0 Alpha 属性,但其中一张图像部分100%透明。
我不重复使用 Cell,因为我没能让它们加载不同的图像。 Cell 一个接一个地重复使用了多达 9 个单元。所以我在内存中有 9 个可重复使用的单元格。也许这就是问题所在。
单元格initWithStyle:reuseIdentifier 方法部分:
CGRect viewFrame = CGRectMake(0.0f, 0.0f, 320.0f, 80.0f);
customCellView = [[CustomCellView alloc] initWithFrame:viewFrame];
customCellView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self setBackgroundView:customCellView];
CustomCellView的初始化方法:
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
self.opaque = YES;
self.backgroundColor = [UIColor UICustomColor];
}
return self;
}
图像被加载到 NSMutableArray 作为来自 PNG 网络定位文件 (40 - 80 kBytes) 的 UIImage 对象,UIImage's imageWithData:方法(后异步下载)。
它们被设置为图像加载方法中的可见单元格,并在 UITableViewDelegate 的方法 tableView:cellForRowAtIndexPath: 中设置 从它们保存到的数组,并通过 UITableViewCell 以自定义方法传递给 UIView。
然后在UIView的drawRect:重写方法中绘制:
- (void)drawRect:(CGRect)rect {
CGRect contentRect = self.bounds;
if (!self.editing) {
CGFloat boundsX = contentRect.origin.x;
CGFloat boundsY = contentRect.origin.y;
CGPoint point;
point = CGPointMake(boundsX, boundsY);
if (firstImage) { [firstImage drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
if (secondImage) { [secondImage drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
}
}
如您所见,图像是使用drawInRect:blendMode:alpha: 方法绘制的。
问题
好吧,当UITableView在在设备上滚动时,您会注意到(注意对用户不利,非常糟糕)每次加载新单元格时都会停机滚动。
编辑:问题更多是混合问题,在代码中,您看到互联网图像被绘制在已经捆绑的图像下方 - 不绘制重叠图像使滚动速度提高了 70%。
想法
从包中加载图像时,相同的实现没有停机时间。我应该将图像保存到应用程序沙箱,然后从那里使用它们。这听起来非常糟糕,因为您应该尽量减少移动设备应用程序中的读写操作,因为每次读取或写入时磁盘都会慢慢死机。
编辑:或者我应该将图像存储为 Core Graphics 对象?
编辑:this 问题中有一些线索。但是我不知道如何有效地进行自定义绘图。
【问题讨论】:
-
是的,感谢您链接我在帖子中已经链接的内容。天才。
标签: iphone web-services performance uitableview uiimage