擦除持久的drawRect

时间:2012-06-24 19:02:11

标签: ios5 uiview core-graphics drawrect

我终于设法得到了一直没有使用的DrawRect (我也有setClearsContextBeforeDrawing:YES)

- (void)drawRect:(CGRect)rect
{
    UIGraphicsPushContext(drawingContext);
    CGImageRef cgImage = CGBitmapContextCreateImage(drawingContext); 
    UIImage *uiImage = [[UIImage alloc] initWithCGImage:cgImage];

    CGContextSetLineWidth(drawingContext, 4.0);
    if (draw)
        CGContextSetStrokeColorWithColor(drawingContext, [UIColor  whiteColor] CGColor]);
    else
        CGContextSetStrokeColorWithColor(drawingContext, [[UIColor clearColor] CGColor]);

    CGContextMoveToPoint(drawingContext,    lastPt.x - (31.0 / self.transform.a),  lastPt.y - (31.0 / self.transform.a)  );
    CGContextAddLineToPoint(drawingContext, currPt.x - (31.0 / self.transform.a),  currPt.y - (31.0 / self.transform.a)  );
    CGContextStrokePath(drawingContext);

    UIGraphicsPopContext();
    CGImageRelease(cgImage);
    [uiImage drawInRect: rect];

    lastPt = currPt;
}

这留下了一条线,它被绘制了 我的问题是当绘制是否[UIColor clearColor]没有删除我应该用什么擦除?提前致谢

1 个答案:

答案 0 :(得分:2)

由于clearColor的alpha值为零,因此使用它绘制通常没有任何效果。您需要将上下文的混合模式设置为kCGBlendModeCopy才能使其生效。

但是,当您想要删除时,将上下文的混合模式设置为kCGBlendModeClear会更简单,并且当您想要绘制时将其设置回kCGBlendModeNormal

if (draw) {
    CGContextSetBlendMode(drawingContext, kCGBlendModeNormal);
    CGContextSetStrokeColorWithColor(drawingContext, [UIColor  whiteColor] CGColor]);
} else {
    CGContextSetBlendMode(drawingContext, kCGBlendModeClear);
}
相关问题