如何使用Swift从UIBezierPath创建虚线SKShapeNode?

时间:2017-10-31 04:19:46

标签: ios swift sprite-kit skshapenode

我发现的所有解释似乎都说同样的话。我无法弄清楚为什么这不起作用。

var linePath = UIBezierPath()
linePath.move(to: CGPoint(x: 50, y: 50))
linePath.addLine(to: CGPoint(x: 100, y: 100))

var pattern : [CGFloat] = [10.0, 10.0]
linePath.setLineDash(pattern, count: pattern.count, phase: 0)
linePath.lineWidth = 10
linePath.lineCapStyle = .round

let shape = SKShapeNode()
shape.path = linePath.cgPath
shape.strokeColor = UIColor.white

self.addChild(shape)

此代码成功绘制了一条线,但shape未继承linePath的虚线属性,甚至包括宽度。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

let linePath = UIBezierPath()
linePath.move(to: CGPoint(x: 50, y: 50))
linePath.addLine(to: CGPoint(x: 100, y: 100))

var pattern: [CGFloat] = [10.0, 10.0]
let dashed = CGPathCreateCopyByDashingPath (linePath.CGPath, nil, 0, pattern, 2)

var shape = SKShapeNode(path: dashed)
shape.strokeColor = UIColor.white

self.addChild(shape)

注意:在Swift 3中CGPathCreateCopyByDashingPath已替换为path.copy(dashingWithPhase:lengths:)

e.g。

let dashed = SKShapeNode(path: linePath.cgPath.copy(dashingWithPhase: 2, lengths: pattern))