NSBezierPath唯一线

时间:2011-11-12 23:54:31

标签: objective-c cocoa drawing unique nsbezierpath

我正在制作一个简单的绘图应用程序并使用NSBezierPath绘制线条。我是NSView的子类。我需要制作一个方法,允许用户更改下一个路径的颜色和大小(所以用户按下按钮,然后下次他们绘制路径时,它是指定的颜色/大小)但是现在当我尝试这样做会改变所有EXISTING路径的颜色和大小。我怎么能把它们变成“个人”呢?这是我的代码:

- (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路径。

3 个答案:

答案 0 :(得分:4)

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

    -(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++;
}

    }

答案 1 :(得分:1)

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

我的建议是让NSMutableArray来保存您的路径,然后您可以找到[myArray objectAtIndex:myIndex]的特定路径来更改颜色。

答案 2 :(得分:0)

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

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