CAShapeLayer保持关闭路径,我希望路径打开

时间:2017-02-19 13:20:35

标签: objective-c core-animation

我正在使用CA从点阵列中绘制线段。出于某种原因,虽然我没有关闭NSBezierPath,但CAShapeLayer会形成一个封闭的形状。以下是我的代码。还有其他人有这个问题吗?

// mappedPoints is an array of CGPoints

NSBezierPath *path = [NSBezierPath bezierPath];

[path appendBezierPathWithPoints:mappedPoints count:numPoints];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [path CGPath];
shapeLayer.strokeColor = [color CGColor];
shapeLayer.lineWidth = lineWidth;
shapeLayer.fillColor = nil;

[self.layer addSublayer:shapeLayer];

1 个答案:

答案 0 :(得分:0)

我允许自己在这里猜测[path CGPath]电话正在关闭那条道路,因为这正是发生在我身上的事。

为了提供更多上下文 - Apple的Creating a CGPathRef From an NSBezierPath Object示例代码创建了一个NSBezierPath类别方法,如上面的CGPath,其中包含以下内容:

// Be sure the path is closed or Quartz may not do valid hit detection.
if (!didClosePath)
    CGPathCloseSubpath(path);

背后的原因(来自同一来源):

  

Quartz要求关闭路径以便对其进行命中检测   路径的填充区域

如果您对填充区域命中检测不感兴趣,可以跳过该路径关闭部分,并获得预期的行为。