Функция close () в UIBezierPath не работает для SKShapeNode - PullRequest
0 голосов
/ 11 марта 2019

Функция close () должна создавать отрезок между первой и последней точками в подпути. Это работает на детской площадке, но не работает когда я создаю SKShapeNode с UIBezierPath и использую его для ARSKView. Есть идеи как это исправить?

func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {
    let bezierPath = UIBezierPath()
    bezierPath.move(to: CGPoint(x: 40, y: 0))
    let shapeHeight: CGFloat = 40
    bezierPath.addQuadCurve(to: CGPoint(x: 40.0, y: shapeHeight), controlPoint: CGPoint(x: 100.0, y: shapeHeight/2.0))
    bezierPath.close()

    let shape = SKShapeNode(path: bezierPath.cgPath, centered: true)
    shape.isAntialiased = false
    shape.strokeColor = .white
    shape.fillColor = .clear
    shape.lineWidth = 2.0
    return shape
}

enter image description here enter image description here

1 Ответ

1 голос
/ 11 марта 2019

Я не знаю причину этого, но это очень легко исправить:

    bezierPath.move(to: CGPoint(x: 40, y: 0))

    bezierPath.addLine(to:  CGPoint(x: 40.0001, y: 0)) //Add this line

    let shapeHeight: CGFloat = 40
    bezierPath.addQuadCurve(to: CGPoint(x: 40.0, y: shapeHeight), controlPoint: CGPoint(x: 100.0, y: shapeHeight/2.0))
    bezierPath.close()
...