Swift UIView рисует диагональ с одной стороны и круглый угол

Я рисую вид с диагональной стороны

как это:

введите здесь описание изображения введите здесь описание изображения введите здесь описание изображения

код:

    let layerWidth = layer.frame.width
    let bezierPath = UIBezierPath()
    let pointA = CGPoint(x: 0, y: 44)
    let pointB = CGPoint(x: 150, y: 0)
    let pointC = CGPoint(x: layerWidth, y: 0)
    let pointD = CGPoint(x: layerWidth, y:44)
    bezierPath.move(to: CGPoint(x: pointA.x, y: pointA.y) )
    bezierPath.addLine(to: CGPoint(x: pointB.x, y: pointB.y))
    bezierPath.addLine(to: pointC)
    bezierPath.addLine(to: pointD)
    bezierPath.close()
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = bezierPath.cgPath
    layer.addSublayer(shapeLayer)

как видите, все хорошо, но я хочу сделать углы скругленными

как это:

введите здесь описание изображения введите здесь описание изображения введите здесь описание изображения

Как я могу достичь этого результата?

ДОБАВИТЬ: и после получения результата, я хочу установить эту форму как маску для другого вида, но есть проблема: у второго вида есть граница и если я задаю свою форму, я теряю часть этой границы

Код:

layer.mask = shapeLayer

неверный результат:

введите здесь описание изображения


person Дима Савичев    schedule 30.01.2021    source источник


Ответы (1)


Окей, я основал путь - https://stackoverflow.com/a/60035279/676205

просто напишите 4 пункта, например:

        let grayPath = UIBezierPath()
        addArcs(
            to: grayPath,
            pointsAndRadii: [
                (point: CGPoint(x: 0, y: 0), radius: 2),
                (point: CGPoint(x: self.bounds.width - 104, y: 0), radius: 10),
                (point: CGPoint(x: self.bounds.width, y: self.bounds.height), radius: 2),
                (point: CGPoint(x: 104, y: self.bounds.height), radius: 6),
            ])
        grayPath.close()

следующий набор маски:

let shapeLayer = CAShapeLayer()
shapeLayer.path = grayPath.cgPath
layer.mask = shapeLayer

если у вас есть более эффективный способ или лучшая производительность, напишите )

person Дима Савичев    schedule 30.01.2021