如何在 SWIFT 中绘制自定义圆角矩形?

How to draw a custom rounded rectangle in SWIFT?

我正在尝试以编程方式绘制上图所示的形状。

此形状有自定义圆角。

view.layer.cornerRadius = some value less than half diameter

这没有用。设置 cornerRadius 在每一侧绘制直线(如底部图像所示)但我尝试绘制的形状根本没有直线而且它不是椭圆形。

我也在下面尝试过,但没有成功。这段代码只是画了一个椭圆。

var path = UIBezierPath(ovalIn: CGRect(x: 000, y: 000, width: 000, height: 000))

我相信这不能通过设置 cornerRadius 来完成。

应该还有更多。

我不知道 class 我应该使用什么以及如何使用。

请任何人给我一些指导。

谢谢!

您必须将 cipsToBounds 添加到代码中以获取具有给定 cornerRadius 的图像。
尝试打击代码,

 view.layer.cornerRadius = some value 
 view.clipsToBounds = true

您可以为自定义形状使用以下路径

  let path =  UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 150, height: 150), byRoundingCorners: .allCorners, cornerRadii: CGSize(width: 8, height: 8))

您可以根据需要更改宽度和高度,UI

class RoundView: UIView {
    var roundCorner: UIRectCorner? = nil
    var roundRadius:CGFloat = 0

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    private func commonInit() {
        Bundle.main.loadNibNamed(“nib name”, owner: self, options: nil))
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        isUserInteractionEnabled = true
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        if roundCorner != nil {
            // self.roundCorners([.topRight, .bottomLeft, .bottomRight], radius: 15)
            self.roundCorners(roundCorner!, radius: roundRadius)
        }
    }
}

我通过绘制二次方程完成了这个。

let dimention: CGFloat = some value

let path = UIBezierPath()
    path.move(to: CGPoint(x: dimension/2, y: 0))
    path.addQuadCurve(to: CGPoint(x: dimension, y: dimension/2),
                      controlPoint: CGPoint(x: dimension, y: 0))
    path.addQuadCurve(to: CGPoint(x: dimension/2, y: dimension),
                      controlPoint: CGPoint(x: dimension, y: dimension))
    path.addQuadCurve(to: CGPoint(x: 0, y: dimension/2),
                      controlPoint: CGPoint(x: 0, y: dimension))
    path.addQuadCurve(to: CGPoint(x: dimension/2, y: 0),
                      controlPoint: CGPoint(x: 0, y: 0))
    path.close()

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath
    shapeLayer.strokeColor = UIColor.blue.cgColor
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.lineWidth = 1.0
    shapeLayer.position = CGPoint(x: 0, y: 0)

    self.someView.layer.addSublayer(shapeLayer)