iOSでは、UITableViewCellのレイヤーにCALayerを追加しています。CALayerを使用するのはこれが初めてで、テーブルセルの背景色を変更するだけです。私の目標は、(1)CALayerの使用方法を学習し、(2)Instrumentsを使用して、描画が現在の実装よりも高速で、CGContextFillRectの速度が低下するかどうかをテストすることです。
(技術的な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 = ...
と、他のすべての描画はまだそこにありますが、背景は黒です。
私は何が欠けていますか?