在Cocoa应用程序中编辑NSBezierPath

时间:2013-09-02 05:53:34

标签: objective-c macos cocoa

我正在尝试使用NSBezierPath功能性绘制图表。如何删除添加到NSBezierPath的第一行和最后一行?是否有一些直接的方法来实现这一目标?

更新

我正在使用appendBezierPathWithArcWithCenter绘制弧。然后我从两侧的中心画线,以完成填充它的路径。现在我需要一条删除了两条线的路径。我不想创建另一个仅由弧组成的贝塞尔路径。

2 个答案:

答案 0 :(得分:0)

您应该考虑修改返回路径的函数。 在NSBezierPath中,您只能修改与路径元素点相关联的内容(请参阅[NSBezierPath setAssociatedPoints:atIndex:]),但不能修改路径元素类型。

答案 1 :(得分:0)

您无法删除NSBezierPath的各个元素。您只能编辑现有元素或删除所有元素。您的案例的最佳选择是将所有元素(不需要的除外)复制到新路径。

如果路径非常长并且可能存在性能问题,则可以移动第一个和最后一个点以匹配第二个和第二个最后一个点。但这不会产生完全相同的图形:

NSInteger elementCount = [path elementCount];
if (elementCount > 2) {
    CGPoint points[3];
    [path elementAtIndex:1 associatedPoints:points];
    points[1] = points[0];
    points[2] = points[0];
    [path setAssociatedPoints:points atIndex:0];

    [path elementAtIndex:elementCount - 2 associatedPoints:points];
    points[1] = points[0];
    points[2] = points[0];
    [path setAssociatedPoints:points atIndex:elementCount - 1];
}