绘制形状时删除线条

时间:2009-11-04 10:57:25

标签: iphone path draw shapes cg

我正在尝试通过触摸来制作在屏幕上绘制形状的应用程序。

我可以从一个点到另一个点画一条线 - 但它会在每次新抽奖时消失。

这是我的代码:

CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
    //[self addSubview:noteView];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    location = [touch locationInView:touch.view];
    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();
    [[UIColor blueColor] set];
    CGContextSetLineWidth(context,10);
    drawAtPoint.x =location.x;
    drawAtPoint.y =location.y;
    CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
    CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
    CGContextStrokePath(context);

    lastPoint.x =location.x;
    lastPoint.y =location.y;
}

感谢您的帮助 -

尼尔。

3 个答案:

答案 0 :(得分:2)

正如您所发现的那样,-drawRect是您显示视图内容的位置。您只能在屏幕上“看到”您在此处绘制的内容。

这比Flash更低级别,你可以在舞台上添加一个包含一行的动画片段,一段时间后再添加另一个包含一行到舞台的动画片段,现在你看到 - 两行!

你需要做一些工作,并且可以设置像......这样的东西。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [[event allTouches] anyObject]; 
    location = [touch locationInView:touch.view]; 

    [self addNewLineFrom:lastPoint to:location];

    lastPoint = location;

    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)]; 
}

- (void)drawRect:(CGRect)rect {

    context = UIGraphicsGetCurrentContext();

    for( Line *eachLine in lineArray )
        [eachLine drawInContext:context];

}

我认为你可以看到如何充实你的需要。

另一种解决方法是使用CALayers。使用这种方法你不会在里面绘制 - - (void)drawRect - 你添加和删除图层,在它们内部绘制你喜欢的东西,视图将处理它们并根据需要绘制到屏幕。可能更多你正在寻找的东西。

答案 1 :(得分:1)

每次调用drawRect时,都会以空白的方式开始。如果您没有跟踪之前绘制的所有内容以便再次绘制它,那么您最终只会绘制最新的手指,而不是任何旧手指。您必须跟踪所有手指滑动,以便在每次调用drawRect时重绘它们。

答案 2 :(得分:0)

您可以绘制图像,然后只在drawRect:方法中显示图像,而不是重新绘制每一行。图像将为您累积线条。当然,这种方法使撤销更难以实现。

来自iPhone Application Programming Guide

  

使用UIGraphicsBeginImageContext   功能创建一个新的基于图像   图形上下文。创建之后   上下文,你可以绘制你的形象   将内容放入其中然后使用   UIGraphicsGetImageFromCurrentImageContext   用于生成基于的图像的功能   你画的是什么(如果需要,你可以   甚至继续绘制和生成   其他图片。)当你完成   创建图像,使用   UIGraphicsEndImageContext函数来   关闭图形上下文。如果你   喜欢使用Core Graphics,你可以   使用CGBitmapContextCreate函数   创建位图图形上下文   并将您的图像内容绘制到其中。   完成绘图后,使用   CGBitmapContextCreateImage函数来   从位图创建CGImageRef   上下文。你可以绘制核心   图形图像直接或使用它   初始化UIImage对象。