2

这是我的免费手绘代码。但是当我绘制路径时,以前的路径消失了。我无法弄清楚为什么会这样。有谁能够帮助我。这是我的代码。

- (void)drawRect:(CGRect)rect
{

for (NSMutableDictionary *dictionary in pathArray) {

    UIBezierPath *_path = [dict objectForKey:@"Path"];

    UIColor *_colors = [dict objectForKey:@"Colors"];

    [_colors setStroke];

    _path.lineCapStyle = kCGLineCapRound;

    [_path stroke];

  }

}

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

isEdited=YES;

myPath=[[UIBezierPath alloc]init];

myPath.lineWidth=lineWidths;

CGPoint touchPoint = [[touches anyObject] locationInView:self];

UITouch *mytouch=[[touches allObjects] objectAtIndex:0];

[myPath moveToPoint:[mytouch locationInView:self]];

[myPath addLineToPoint:CGPointMake(touchPoint.x+1, touchPoint.y+1)];

[dict setObject:myPath forKey:@"Path"];

[dict setObject:brushPattern forKey:@"Colors"];

[pathArray addObject:dict];

[self setNeedsDisplay];


 }

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

UITouch *mytouch=[[touches allObjects] objectAtIndex:0];

[myPath addLineToPoint:[mytouch locationInView:self]];

[self setNeedsDisplay];

 }
4

2 回答 2

0

您应该在每次触发时创建myPathdict本地化。touchesBegan:放弃他们的类范围定义。

为了更简单(更快)的性能,您仍然可以在类范围currentPathcurrentDict ivars 中使用touchesMoved:

编辑:代码看起来像这样:

//currentPath declared as an iVar of UIBezierPath* type
//currentDict declared as an iVar of NSMutableDictionary* type


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{    
    isEdited=YES;

    UIBezierPath *myPath=[[UIBezierPath alloc]init];  //locally created

    myPath.lineWidth=lineWidths;

    CGPoint touchPoint = [[touches anyObject] locationInView:self];

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];

    [myPath moveToPoint:[mytouch locationInView:self]];

    [myPath addLineToPoint:CGPointMake(touchPoint.x+1, touchPoint.y+1)];

    NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; //locally created

    [dict setObject:myPath forKey:@"Path"];

    [dict setObject:brushPattern forKey:@"Colors"];

    [pathArray addObject:dict];

    [self setNeedsDisplay];

    currentPath = myPath;
    currentDict = dict;
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [currentPath addLineToPoint:[mytouch locationInView:self]];
    [self setNeedsDisplay];
}
于 2012-06-01T09:37:10.753 回答
0

1) 在您的图纸视图中创建一个UIImage *currentImage实例变量。

2) 在视图的 drawRect 方法中放入以下行:

[currentImage drawInRect:self.bounds];

3) 在 touchesEnded 方法中输入以下代码:

        CGRect rect = self.bounds;
        UIGraphicsBeginImageContext(rect.size);
        [self.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *tempImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext(); 
        currentImage = tempImage;
于 2012-06-01T09:49:15.337 回答