NSBezierPath唯一的行



我正在制作一个简单的绘图应用程序,我使用NSBezierPath来绘制线条。我正在子类化NSView。我需要做一个方法,允许用户改变颜色和大小的下一个路径(所以用户按下一个按钮,然后下次他们绘制路径是指定的颜色/大小),但现在,当我尝试这样做,它改变了颜色和大小的所有现有路径。可以说,我怎样才能使它们"个性化"?下面是我的代码:

- (void)drawRect:(NSRect)dirtyRect
{

    [path setLineWidth:5];
    [path setLineJoinStyle:NSRoundLineJoinStyle];
    [path setLineCapStyle:NSRoundLineCapStyle];
    [path stroke];

}
- (void)mouseDown:(NSEvent *)theEvent {
    NSPoint location = [theEvent locationInWindow];
    NSLog(@"%f, %f", location.x, location.y);
    [path moveToPoint:location];
    [self setNeedsDisplay:YES];
}
- (void)mouseUp:(NSEvent *)theEvent {
}
- (void)mouseDragged:(NSEvent *)theEvent {
    NSPoint location = [theEvent locationInWindow];
    [path lineToPoint:location];
    [self setNeedsDisplay:YES];
}
- (void)changeBrushColor:(NSString *)color {
     // change color of the next path
    [self setNeedsDisplay:YES];  // show it
}

我需要创建一个单独的NSBezierPath路径

你必须使用2个可变数组(bezierpaths & color),一个整数变量(笔刷大小)。和一个UIColor变量brushColor

    -(IBAction) brushsizeFun
    {
    brushSize = 30; // any brush size here. better use a slider here to select size
    }
    -(IBAction) brushColorFun
    {
    brushColor = [UIColor redColor]; // Any color here. better use a color picker
    }

    - (void)mouseDown:(NSEvent *)theEvent {
    NSPoint location = [theEvent locationInWindow];
    NSLog(@"%f, %f", location.x, location.y);
    [path release];
    path = [[UIBezierpath alloc]init];
    path.lineWidth = brushSize;
    [path moveToPoint:location];
    [bezierArray addObject:path];
    [colorArray addObject:brushPattern];

    [self setNeedsDisplay:YES];
    }
    - (void)drawRect:(NSRect)dirtyRect
    {
    int q=0;
//Draw the bezierpath and corresonding colors from array
for (UIBezierPath *_path in bezierArray) 
{
    UIColor *_color = [colorArray objectAtIndex:q];
    [_color setStroke];
    [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; 
    q++;
}
    }

这听起来像是你想在mouseDown上开始一个新的路径,否则你所做的就是在现有的路径上追加行。

我的建议是有一个NSMutableArray来保存你的路径,然后你可以用[myArray objectAtIndex:myIndex]找到一个特定的路径来改变颜色。

我觉得我们缺少一些代码来真正理解这一点,但从我所能理解的,你只有一个路径。这段代码让我感到惊讶的是,路径的颜色会发生变化,因为每次绘制时,您都使用灰色来绘制相同的宽度。

此外,在mouseDown中,您总是在最后一个路径上添加一行。整个路径只能有一种颜色。您需要每次创建一个新路径,并通过子类化或使用混合结构保存其颜色。主要思想,一个BezierPath只能有一个颜色和一个描边宽度。

相关内容

  • 没有找到相关文章

最新更新