在iOS上,我將CALayer添加到UITableViewCell的圖層。這是我第一次使用CALayer,它只是應該改變表格單元格的背景顏色。我的目標是(1)學習如何使用CALayer,以及(2)使用Instruments來測試繪圖是否比我當前的實現更快,這會降低CGContextFillRect的速度。使用CALayer設置UITableViewCell背景顏色
(Technical Q&A 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 = ...
行,我所有其他繪圖仍然存在,但在黑色背景上。
我錯過了什麼?
試着用'insertSublayer:atIndex:0',而不是'addSublayer:'。這將該圖層置於子圖層數組的底部。操作系統使用圖層'zPosition'和子圖層數組中的相對位置來確定哪個圖層可見,哪些圖層被遮擋。 – 2013-03-04 22:47:28
@Aaron Brager你爲什麼在這裏使用'CALayer'?你想用它做什麼,你不能在'UIView'上做什麼? – 2013-03-05 02:39:00
@DanielMartín那沒用。在索引0和1處,我只是得到一個黑色背景; 2和更高我沒有看到我的繪圖。 – 2013-03-05 07:14:36