我正在使用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];
答案 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要求关闭路径以便对其进行命中检测 路径的填充区域
如果您对填充区域命中检测不感兴趣,可以跳过该路径关闭部分,并获得预期的行为。