Нарисуйте параллелограмм с круглым краем с некоторым смещением тени - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь нарисовать параллелограмм с закругленными краями. Я хочу, чтобы он был настраиваемым, чтобы можно было использовать один из вертикальных краев под углом 90 градусов.

Как вы видите на изображении, угол topLeft не округляется с кодом ниже

func getParallelogram(width: CGFloat, height: CGFloat, radius: CGFloat) -> CGPath {
        // Points of the parallelogram
        var points = [
            CGPoint(x: width * 0.05, y: 0),
            CGPoint(x: width , y: 0),
            CGPoint(x: width - width * 0.05, y: height),
            CGPoint(x: 0, y: height)
        ]

        let point1 = points[0]
        let point2 = points[1]
        let point3 = points[2]
        let point4 = points[3]

        let path = CGMutablePath()

        path.move(to: point1)
        path.addArc(tangent1End: point1, tangent2End: point2, radius: radius)
        path.addArc(tangent1End: point2, tangent2End: point3, radius: radius)
        path.addArc(tangent1End: point3, tangent2End: point4, radius: radius)
        path.addArc(tangent1End: point4, tangent2End: point1, radius: radius)
        return path
    }

Использование:

let customView = UIView(frame: CGRect(x: 20, y: 50, width: 320, height: 300))
customView.backgroundColor = UIColor.clear
view.addSubview(customView)

let shape = CAShapeLayer()
shape = UIColor.lightGray.cgColor
shape.path = getParallelogram(width: 200, height: 80, radius: 5)
shape.position = CGPoint(x: 10, y: 10)
shape.layer.addSublayer(triangle)

Проблема, с которой я здесь сталкиваюсь, заключается в том, что верхний левый угол не закруглен, если код выше. Буду признателен за любую помощь для достижения этой цели. Также, пожалуйста, укажите мне, есть ли другой альтернативный или более простой подход. Спасибо!

Примечание. Я использую этот код для преобразования треугольника в параллелограмм UIBezierPath Triangle с закругленными краями

1 Ответ

0 голосов
/ 10 апреля 2019

Изменение

    path.move(to: point1)
    path.addArc(tangent1End: point1, tangent2End: point2, radius: radius)
    path.addArc(tangent1End: point2, tangent2End: point3, radius: radius)
    path.addArc(tangent1End: point3, tangent2End: point4, radius: radius)
    path.addArc(tangent1End: point4, tangent2End: point1, radius: radius)

до

    path.move(to: point1)
    path.addArc(tangent1End: point2, tangent2End: point3, radius: radius)
    path.addArc(tangent1End: point3, tangent2End: point4, radius: radius)
    path.addArc(tangent1End: point4, tangent2End: point1, radius: radius)
    path.addArc(tangent1End: point1, tangent2End: point2, radius: radius)

Результат:

enter image description here

...