iOS에서는 UITableViewCell 레이어에 CALayer를 추가하고 있습니다. 이것은 CALayer를 처음 사용하는 것으로 단순히 표 셀의 배경색을 변경하기로되어 있습니다. 내 목표는 (1) CALayer 사용법을 배우고, (2) CGContextFillRect에서 속도가 느려지는 드로잉이 현재 구현보다 빠르다는 것을 Instrument를 사용하여 테스트하는 것입니다.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'의'. 그러면 레이어가 하위 레이어 배열의 맨 아래에 놓입니다. OS는'zPosition' 레이어와 sublayers 배열의 상대 위치를 사용하여 어떤 레이어가 보이고 어떤 것이 차단되는지를 결정합니다. –
@Aaron Brager 왜 여기에 'CALayer'를 사용하고 있습니까? 'UIView'에서 이미 할 수없는 일로 무엇을하고 싶습니까? –
@ DanielMartín 그건 작동하지 않았다. 인덱스 0과 1에서 검정색 배경을 얻습니다. 2 이상 내 그림이 보이지 않습니다. –