我正在向UITableViewCell绘制内容并且它运行良好,但我正在尝试了解是否有更好的方法来执行此操作。
每个单元格都包含以下组件:
目前效果很好。绘图如下:
UITableViewController进入/重用单元格,设置所需数据和调用
[cell setNeedsDisplay]
该单元格有缩略图的CALayer - thumbnailLayer
在单元格的drawRect中,它绘制渐变背景和两个字符串
单元格的drawRect然后调用setIcon - 它获取缩略图并将图像设置为thumbnailLayer的内容。如果未在本地找到图像,则会将加载图像设置为thumbnailLayer的内容,并异步获取缩略图。收到缩略图后,再次通过调用setIcon重置它。重置thumbnailLayer.contents
这一切目前都有效,但使用乐器我看到缩略图与渐变合成。我尝试了以下方法来解决这个问题:
将单元格的backgroundView设置为一个视图,其drawRect将绘制渐变,以便单元格的drawRect可以绘制缩略图,并使用setNeedsDisplayInRect将允许我仅在加载后重绘缩略图 - 但这导致了backgroundView的绘图(渐变)覆盖单元格的绘图(文本)。
我只是在单元格的drawRect中绘制缩略图,但是当调用setNeedsDisplay时,drawRect将只与另一个图像重叠,并且加载图像可能会显示出来。我会清除rect,但是我必须重绘渐变。
我会尝试在CAGradientLayer中绘制渐变并存储对它的引用,这样我就可以快速重绘它,但我想如果单元格的高度发生变化,我必须重绘渐变。
有什么想法吗?我确定我错过了什么,所以任何帮助都会很棒。
颠簸 - 任何人对此都有任何想法?
答案 0 :(得分:0)
UIView和CALayer都有一个不透明的属性。任何时候你可以设置为YES,将没有合成,绘图会更快。如果缩略图图像没有透明度,则它是理想的候选者。
答案 1 :(得分:0)
我开始使用setNeedsDisplayInRect。我仍然在drawRect中绘制所有内容,但是当我这样做时,我会检查需要绘制的rect,并且只更新那个rect。我也使用CGLayers绘制并将它们保存为ivars。当我需要重绘未更改的部分时,我使用存储的CGLayer。缩略图不再是CALayer。对于绘图选择,我将不得不使用selectedBackgroundView并重用我的CGLayers。