2

我想更改 SKShapeNode (rect) 的两个角的半径,但我没有找到可行的解决方案。我尝试使用路径,但它没有用。斯威夫特 4.2、iOS 12.1.1、Xcode 10.1

let shape = SKShapeNode()
shape.path = UIBezierPath(roundedRect: CGRect(x: -128, y: -128, width: 256, height: 256), cornerRadius: 64).cgPath
shape.position = CGPoint(x: frame.midX, y: frame.midY)
shape.fillColor = UIColor.red
shape.strokeColor = UIColor.blue
shape.lineWidth = 10
addChild(shape)
4

1 回答 1

2

我制作了一个函数,允许您将每个角半径自定义为您想要的任何大小。您可以有 1、2、3 或 4 个带半径的角。如果您总是只想要两个角,那么我建议您制作一个包装函数,这样您每次调用它时就不必填写太多参数。

func CustomRoundRectPath(_ rect:CGRect, _ TLR:CGFloat,_ TRR:CGFloat,_ BLR:CGFloat,_ BRR:CGFloat) -> CGPath {

    let w = rect.width
    let h = rect.height

    //TLP:(TLP)
    let TLP = CGPoint(x: TLR, y: h - TLR)
    let TRP = CGPoint(x: w - TRR, y: h - TRR)
    let BLP = CGPoint(x: BLR, y: BLR)
    let BRP = CGPoint(x: w - BRR, y: BRR)

    //Create path and addComponents
    let path = CGMutablePath()
    path.addArc(center: TLP, radius: TLR, startAngle: CGFloat.pi, endAngle: CGFloat.pi/2, clockwise: true)
    path.addLine(to: CGPoint(x: TRP.x, y: h))
    path.addArc(center: TRP, radius: TRR, startAngle: CGFloat.pi/2, endAngle: 0, clockwise: true)
    path.addLine(to: CGPoint(x: w, y: BRP.y))
    path.addArc(center: BRP, radius: BRR, startAngle: 0, endAngle: -CGFloat.pi/2, clockwise: true)
    path.addLine(to: CGPoint(x: BLP.x, y: 0))
    path.addArc(center: BLP, radius: BLR, startAngle: -CGFloat.pi/2, endAngle: -CGFloat.pi, clockwise: true)
    path.addLine(to: CGPoint(x: 0, y: TLP.y))

    return path
}
于 2018-12-07T19:19:53.070 回答