CoreGraphics中的透明背景

时间:2011-02-28 21:59:48

标签: iphone core-graphics

我试图在CG中获得透明背景,但它一直是黑色的。

我有以下代码:

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        DLog(@">>> Alloc: DrawingCanvas [0x%X]", (unsigned int)self);
        [self setOpaque:NO];
        [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (void) drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect frame = rect;
    int counter = 3;

    CGContextClearRect(context, frame);
    CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
    CGContextFillRect(context, frame);
}

如何让此代码显示透明背景?

3 个答案:

答案 0 :(得分:4)

使用该设置,只要您没有将clearsContextBeforeDrawing设置为NO,当调用drawRect:方法时,背景应该已经是透明的。删除CGContextClearRect和其他绘图调用。

答案 1 :(得分:3)

你可以简单地删除这些行:

CGContextClearRect(context, frame);
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context, frame);

只要你将opaque设置为NO并将clearColor设置为backgroundColor,一切都应该没问题。

绘图时要小心,因为您的其他绘图代码可能完全填满背景(在非裁剪的上下文中处理[path fill]个事物。)

答案 2 :(得分:1)

我遇到了同样的问题,解决方法是从父视图的类中设置我正在绘制的UIView的backgroundColor属性。我不需要任何代码来清除UIView类中绘图发生的背景。

myDrawingView.backgroundColor = [UIColor clearColor];