【问题标题】:erase a persistent drawRect擦除持久的drawRect
【发布时间】:2012-06-24 19:02:11
【问题描述】:

我终于设法得到了一直没有清除的 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;
}

这会在绘制时留下一条线
我的问题是当 draw 是 NO [UIColor clearColor] 没有擦除我应该用什么来擦除?提前致谢

【问题讨论】:

    标签: ios5 uiview core-graphics drawrect


    【解决方案1】:

    因为clearColor 的alpha 为零,所以用它绘图通常没有任何效果。您需要将上下文的混合模式设置为kCGBlendModeCopy 才能生效。

    然而,当你想擦除时将上下文的混合模式设置为kCGBlendModeClear,当你想绘图时设置回kCGBlendModeNormal会更简单:

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

    【讨论】:

    • @rob:使用“kCGBlendModeClear”会擦除绘图..但它也会清除图像视图中设置的图像(我试图在图像上绘制)。对此有何想法?
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2016-09-16
    • 2016-10-22
    • 2017-10-18
    相关资源
    最近更新 更多