在 iOS 上,我将 CALayer 添加到 UITableViewCell 的层。这是我第一次使用CALayer,它只是为了改变表格单元格的背景颜色。我的目标是 (1) 学习如何使用 CALayer,以及 (2) 使用 Instruments 测试绘图是否比我当前的实现快,这会减慢 CGContextFillRect。
(技术问答 QA1708是这一切的催化剂。)
当前实施(作品)
- (void)drawRect:(CGRect)r
{
UIColor *myColor = [self someColor];
[myColor set];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context, r); // draw the background color
// now draw everything else
// [...]
}
尝试了新的实现(不起作用)
#import <QuartzCore/QuartzCore.h>
@implementation MyCell {
CALayer *backgroundLayer;
}
- (id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// [...other stuff here too]
backgroundLayer = [[CALayer alloc] init];
[[self layer] addSublayer:backgroundLayer];
}
return self;
}
- (void)drawRect:(CGRect)r {
backgroundLayer.frame = CGRectMake(0, 0, r.size.width, r.size.height);
[backgroundLayer setBackgroundColor:[self someColor]];
// now draw everything else
// [...]
}
我看到正确的颜色,但没有其他绘图(我假设自定义绘图最终位于我的新图层后面)。
如果我删除这backgroundLayer.frame = ...
条线,我的所有其他绘图仍然存在,但在黑色背景上。
我错过了什么?