从UIImage中清除UIView绘图

时间:2014-01-15 15:43:35

标签: ios objective-c uiview uiimage

好吧,即将惊慌失措......

制作绘图应用: 主视图(按钮,广告等) 然后是一个占据屏幕一部分的容器视图(带有自定义绘图类) 当用户单击主视图中的按钮时,它会在容器视图中触发一个事件(可能是更好的方法,但我找不到它)

当用户按下容器内的某处时,它会记录该点,添加一行,然后更新draw:rect方法:

- (void)drawRect:(CGRect)rect
{
    [incImage drawInRect:rect];
    [path stroke];
}

(当用户绘制时,UIImage('incImage')被添加到其上,并且就像它一样,它被绘制到视图上)

绘图代码:

- (void)drawBitmap
{
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, 0.0);
    [[UIColor colorWithRed:_brushR green:_brushG blue:_brushB alpha:_brushO] setStroke];
    [incImage drawAtPoint:CGPointZero];
    [path stroke];
    incImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

但是我无法清除视图! 我已经尝试将draw:Rect方法拆分为2个部分(如果clear为true,如果不是),并执行此操作:

UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, 0.0);
rectpath = [UIBezierPath bezierPathWithRect:CGRectMake(0,0,incImage.size.width,incImage.size.height)];
[[UIColor whiteColor] setFill];
[rectpath fill];
[incImage drawAtPoint:CGPointZero];
incImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
_clear=true;
[self setNeedsDisplay];

然后将draw:Rect更改为:

- (void)drawRect:(CGRect)rect
{
    if (clear) {
        [incImage drawInRect:rect];
        [rectpath fill];
    }
    else {
        [incImage drawInRect:rect];
        [path stroke];
    }
}

但是它不起作用(我也尝试创建一个CGRect,然后用白色填充它并使其成为图像并尝试将该图像绘制到视图中但没有运气)。我也检查过,问题不是从容器视图中传递和调用方法的主视图,我试图去做这个或我的绘制方法的方式有问题。

任何帮助都会非常感激,我的Mac生活可能依赖于它:)

2 个答案:

答案 0 :(得分:1)

创建这样的函数:

-(void) clearDrawing {
    incImage = nil;
    [self setNeedsDisplay];
}

它将删除incImage,因此它将不再显示在-(void) drawRect中。如果你想再次展示一些东西,你可以调用-(void)drawBitmap来执行这个:incImage = UIGraphicsGetImageFromCurrentImageContext();,然后用一些绘图重新创建incImage。

答案 1 :(得分:0)

调用-drawRect:时,视图已被删除。听起来你通过将它们添加到path来记录点数。当您想要“清除”视图时,您需要更新存储正在呈现的数据的对象 - 在您的情况下,这可能意味着通过调用path或通过简单地抛出来重置-removeAllPoints远离旧路,重新开始新路。