我需要制作自己的UITableViewCellAccessoryDisclosureIndicator,这样我才能拥有自定义颜色。我需要设置背景以清除。无论我尝试什么,我都无法使clearColor工作。当我将下面的CGContextSetFillColorWithColor行更改为redColor时,它是红色的。我已尝试设置opaque和backgroundColor,然后调用super drawRect并删除我的填充代码并显示填充代码,但它仍然没有用。我也以各种方式尝试过CGContextClearRect。
这是来自模拟器的红色版本。我需要清楚UIView,以便显示漂亮的背景图像。
我并不十分关心滚动性能,因为这个表只有很少的行。
- (instancetype) init {
self = [super init];
if (!self) return nil;
// [self setOpaque:NO];
// [self setBackgroundColor:[UIColor clearColor]];
return self;
}
- (void)drawRect:(CGRect)rect {
// [super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
// my obviously silly/naive attempt at making the background clear
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); // redColor works
CGContextFillRect(context, rect);
// drawing code for chevron
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 3.f);
CGContextSetLineJoin(context, kCGLineJoinMiter);
CGContextMoveToPoint(context, PADDING, PADDING);
CGContextAddLineToPoint(context, self.frame.size.width - PADDING, self.frame.size.height/2);
CGContextAddLineToPoint(context, PADDING, self.frame.size.height - PADDING);
CGContextStrokePath(context);
CGContextRestoreGState(context);
}
答案 0 :(得分:1)
这个怎么样?
self.contentView.opaque = NO;
self.backgroundColor = [UIColor clearColor];
答案 1 :(得分:0)
指定。弗利。初始化器。真是浪费时间。
UIView指定的初始化程序是initWithFrame。 initWithFrame不会调用init。请注意,我重写了init。我原以为initWithFrame会调用init。
这里有什么用(注意我不必画背景,即使我没有调用super.drawRect):
- (instancetype) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (!self) return nil;
// assume decent defaults
[self setColor:[UIColor darkGrayColor]];
[self setBackgroundColor:[UIColor clearColor]];
return self;
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextSetStrokeColorWithColor(context, [self color].CGColor);
CGContextSetLineWidth(context, 3.f);
CGContextSetLineJoin(context, kCGLineJoinMiter);
CGContextMoveToPoint(context, PADDING, PADDING);
CGContextAddLineToPoint(context, rect.size.width - PADDING, rect.size.height/2);
CGContextAddLineToPoint(context, PADDING, rect.size.height - PADDING);
CGContextStrokePath(context);
CGContextRestoreGState(context);
}