Я хочу создать округлую форму UIView снизу внутри ScrollView в Swift - PullRequest
2 голосов
/ 24 января 2020

enter image description here

Не на верхних кромках. Я хочу сделать как это на нижних краях и внутри ScrollView. Как это сделать

Ответы [ 4 ]

2 голосов
/ 24 января 2020

Это должно быть близко к тому, что вы хотите. Поиграйте с более точными точками пути, если это не совсем правильно:

@IBDesignable
class MyRoundBottomView: UIView {

    override func layoutSubviews() {
        super.layoutSubviews()

        let y = bounds.size.height - 80.0

        let p1 = CGPoint(x: 0.0, y: y)
        let p2 = CGPoint(x: bounds.size.width, y: y)

        let cp1 = CGPoint(x: p1.x, y: bounds.size.height)
        let cp2 = CGPoint(x: bounds.size.width, y: bounds.size.height)

        let myBez = UIBezierPath()

        myBez.move(to: CGPoint(x: 0.0, y: y))

        myBez.addCurve(to: p2, controlPoint1: cp1, controlPoint2: cp2)

        myBez.addLine(to: CGPoint(x: bounds.size.width, y: 0.0))
        myBez.addLine(to: CGPoint.zero)

        myBez.close()

        let l = CAShapeLayer()
        l.path = myBez.cgPath
        layer.mask = l

    }

}

Он помечен как @IBDesignable, так что вы можете добавить UIView (в раскадровке) и назначить свой пользовательский класс для MyRoundBottomView, и вы Увидим это во время разработки:

enter image description here

1 голос
/ 24 января 2020
extension UIView { 
    func roundCorners(corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        layer.mask = mask
    }
}

используйте его как

yourView.roundCorners(corners : [.bottomLeft, .bottomRight], radius : 20 )

Кроме того, обновите макеты в viewDidLayoutSubviews(), иначе вы можете столкнуться с отсечкой в ​​соевых устройствах.

1 голос
/ 24 января 2020

Настроить maskedCorners и cornerRadius на view's layer, т.е.

customView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
customView.layer.cornerRadius = customView.bounds.width / 2.0
0 голосов
/ 24 января 2020

создайте расширение следующим образом

extension UIView {

    func round(corners: UIRectCorner, cornerRadius: Double) {

        let size = CGSize(width: cornerRadius, height: cornerRadius)
        let bezierPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: size)
        let shapeLayer = CAShapeLayer()
        shapeLayer.frame = self.bounds
        shapeLayer.path = bezierPath.cgPath
        self.layer.mask = shapeLayer
    }
}

вы можете использовать его вот так

self.myView.round(corners: [.bottomLeft, .bottomRight], cornerRadius: 35)

Надеюсь, оно будет работать для вас ...:)

...