首页 > 解决方案 > 如何在 SWIFT 中绘制自定义圆角矩形?

问题描述

我正在尝试绘制这个形状

设置cornerRadius不起作用

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

这种形状有定制的圆角。

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

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

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

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

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

应该还有更多。

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

请任何人给我一些指导。

谢谢!

标签: iosswiftcore-graphicsuibezierpath

解决方案


我通过绘制二次曲线来实现这一点。

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)

推荐阅读