Установите радиус одного угла SKShapeNode - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу изменить радиус двух углов SKShapeNode (прямоугольник), но я не нашел рабочего решения.Я пытался использовать путь, и это не сработало.Swift 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)

1 Ответ

0 голосов
/ 07 декабря 2018

Я сделал функцию, которая позволит вам настроить каждый угловой радиус на любой размер, который вы хотите.Вы можете иметь 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
}
...