【问题标题】:Multiple coloured bezier paths多条彩色贝塞尔路径
【发布时间】:2012-06-01 07:20:00
【问题描述】:

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

- (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];

 }

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch bezier


    【解决方案1】:

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

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

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

    //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];
    }
    

    【讨论】:

      【解决方案2】:

      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;
      

      【讨论】:

        猜你喜欢
        • 2021-09-10
        • 2011-03-30
        • 2011-02-26
        • 2017-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多