Ios UIBezierPath只有半个笔划

Ios UIBezierPath只有半个笔划,ios,swift,uibezierpath,Ios,Swift,Uibezierpath,当我试图用下面的代码画一个像下面这样的形状时,这个形状只显示半笔画线 创建形状: func createPointerPath() -> UIBezierPath { let pointerPath = UIBezierPath() pointerPath.move(to: CGPoint(x:0, y:0)) pointerPath.addCurve(to: CGPoint(x:0, y:100), controlPoint1: CGPoint(x:-10,

当我试图用下面的代码画一个像下面这样的形状时,这个形状只显示半笔画线

创建形状:

func createPointerPath() -> UIBezierPath {

    let pointerPath = UIBezierPath()
    pointerPath.move(to: CGPoint(x:0, y:0))

    pointerPath.addCurve(to: CGPoint(x:0, y:100), controlPoint1: CGPoint(x:-10, y:0), controlPoint2: CGPoint(x:-50, y:100))
    pointerPath.addCurve(to: CGPoint(x:0, y:0), controlPoint1: CGPoint(x:50, y:100), controlPoint2: CGPoint(x:10, y:0))

    pointerPath.stroke()        
    pointerPath.close()
    return pointerPath
}
如果我将x设置为10,它将显示另一条半行程线,但形状不是闭合的

    pointerPath.addCurve(to: CGPoint(x:10, y:0), controlPoint1: CGPoint(x:50, y:100), controlPoint2: CGPoint(x:10, y:0))


有什么建议吗?谢谢

这是我尝试后得到的;希望对你有帮助

    let v : UIView = UIView.init(frame: CGRect.init(x: 50, y: 50, width: 200, height: 200))
    v.layer.borderWidth = 2.0
    let shape = CAShapeLayer()
    shape.path = createPointerPath().cgPath
    shape.position = CGPoint(x: frame.midX, y: frame.midY)
    shape.fillColor = UIColor(red: 1.0, green: 0.439, blue: 0.678, alpha: 1.0).cgColor
    shape.strokeColor = UIColor.white.cgColor
    shape.lineWidth = 2
    v.layer.addSublayer(shape)
    self.addSubview(v)
这与您提供的功能相同:

func createPointerPath() -> UIBezierPath {

    let pointerPath = UIBezierPath()
    pointerPath.move(to: CGPoint(x:0, y:0))

    pointerPath.addCurve(to: CGPoint(x:0, y:100), controlPoint1: CGPoint(x:-10, y:0), controlPoint2: CGPoint(x:-50, y:100))
    pointerPath.addCurve(to: CGPoint(x:0, y:0), controlPoint1: CGPoint(x:50, y:100), controlPoint2: CGPoint(x:10, y:0))

    pointerPath.stroke()
    pointerPath.close()
    return pointerPath
}
输出:


我无法仅用
createPointerPath()
代码重现这一点。我怀疑臭虫在别处。如何绘制内部填充和外部颜色?这个问题可能是存在的。边注:一般不应该调用<代码>。如果存在当前上下文,则将其引入当前上下文。您通常应该让调用方处理路径的笔划。(事实上,如果您在返回后向此路径添加更多内容,这可能是您的问题的一部分。)@RobNapier形状被添加为SKShapeNode,我补充了代码,请再次查看。我肯定会将该
.stroke
删除。@RobNapier是的,当.stroke删除时警告消失,但它仍然显示出半冲程:(是的,它在CAShapeLayer中工作得非常完美。我是否错过了SKShapeNode中的某些内容?我可以建议可能的更改!!@jdleung为什么使用SKShapeNode?使用哪个swift版本?我需要将其添加为SKShapeNode,以便它可以移动。而且不仅是一个形状,还会有10多个相同的形状。我使用的是swift 3.0,Xcode最新版本。你能让它工作吗?)n SKShapeNode?我最终通过将x或y更改为0.1,而不是将0作为第一条曲线来实现它。这可能不是正确的解决方案,但它是有效的。
func createPointerPath() -> UIBezierPath {

    let pointerPath = UIBezierPath()
    pointerPath.move(to: CGPoint(x:0, y:0))

    pointerPath.addCurve(to: CGPoint(x:0, y:100), controlPoint1: CGPoint(x:-10, y:0), controlPoint2: CGPoint(x:-50, y:100))
    pointerPath.addCurve(to: CGPoint(x:0, y:0), controlPoint1: CGPoint(x:50, y:100), controlPoint2: CGPoint(x:10, y:0))

    pointerPath.stroke()
    pointerPath.close()
    return pointerPath
}