【发布时间】:2010-04-02 18:23:42
【问题描述】:
我正在向 UITableViewCell 绘制内容,它运行良好,但我正在尝试了解是否有更好的方法。
每个单元格都有以下组件:
- 左侧的缩略图 - 可能来自服务器,因此它是异步加载的
- 标题字符串 - 可变长度,因此每个单元格的高度可能不同
- 时间戳字符串
- 渐变背景 - 渐变从单元格顶部到底部,并且是半透明的,因此背景颜色具有光泽
目前运行良好。绘图发生如下:
-
UITableViewController 初始化/重用一个单元格,设置所需的数据,并调用
[单元集NeedsDisplay]
单元格有一个用于缩略图的 CALayer - thumbnailLayer
在单元格的drawRect中绘制渐变背景和两个字符串
单元格的 drawRect 然后调用 setIcon - 它获取缩略图并将图像设置为 thumbnailLayer 的内容。如果本地没有找到图片,则将加载图片设置为 thumbnailLayer 的内容,并异步获取缩略图。收到缩略图后,通过再次调用 setIcon 将其重置并重置 thumbnailLayer.contents
目前这一切都有效,但使用仪器我看到缩略图正在与渐变合成。我尝试了以下方法来解决这个问题:
将单元格的 backgroundView 设置为一个视图,其 drawRect 将绘制渐变,以便单元格的 drawRect 可以绘制缩略图,使用 setNeedsDisplayInRect 将允许我仅在加载后重绘缩略图 --- 但这导致backgroundView 的绘图(渐变)覆盖单元格的绘图(文本)。
我只会在单元格的 drawRect 中绘制缩略图,但是当调用 setNeedsDisplay 时,drawRect 只会与另一个图像重叠,并且加载的图像可能会显示出来。我会清除矩形,但我必须重新绘制渐变。
我会尝试在 CAGradientLayer 中绘制渐变并存储对它的引用,以便快速重绘它,但我想如果单元格的高度发生变化,我必须重新绘制渐变。
有什么想法吗?我确定我遗漏了一些东西,所以任何帮助都会很棒。
Bump - 有人对此有什么想法吗?
【问题讨论】:
标签: iphone cocoa-touch uitableview core-animation core-graphics