我的自定义UIView如何绘制清晰的背景?

时间:2014-07-23 15:02:42

标签: ios objective-c uiview core-graphics

我需要制作自己的UITableViewCellAccessoryDisclosureIndicator,这样我才能拥有自定义颜色。我需要设置背景以清除。无论我尝试什么,我都无法使clearColor工作。当我将下面的CGContextSetFillColorWithColor行更改为redColor时,它是红色的。我已尝试设置opaque和backgroundColor,然后调用super drawRect并删除我的填充代码并显示填充代码,但它仍然没有用。我也以各种方式尝试过CGContextClearRect。

这是来自模拟器的红色版本。我需要清楚UIView,以便显示漂亮的背景图像。

我并不十分关心滚动性能,因为这个表只有很少的行。

screenshot

- (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);
}

2 个答案:

答案 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);
}