【问题标题】:iOS - Setting lineJoinStyle to .round for UIBezierpath does not work (SWIFT)iOS - 为 UIBezierpath 将 lineJoinStyle 设置为 .round 不起作用 (SWIFT)
【发布时间】:2020-05-13 14:46:43
【问题描述】:

我的代码是这样的:

let myPath = UIBezierPath()
myPath.lineJoinStyle = .round
let rect = bounds
myPath.move(to: CGPoint(x: rect.maxX * 0.05, y: rect.midY))
myPath.addCurve(to: CGPoint(x: rect.maxX / 3, y: rect.maxY / 10),
                controlPoint1: CGPoint(x: rect.midX/5, y: rect.midY/2),
                controlPoint2: CGPoint(x: rect.midX/3, y: rect.midY/3))
myPath.addQuadCurve(to: CGPoint(x: rect.maxX * 2/3, y: rect.maxY / 5),
                    controlPoint: CGPoint(x: rect.maxX * 0.6, y: rect.maxY / 4))

但是第一条和第二条曲线的连接点仍然不是圆的。我该怎么做才能使它圆润光滑?

这是结果图片:

【问题讨论】:

  • 你能告诉我你期待什么输出......?
  • 我希望关节点更光滑圆润,像这样:prnt.sc/sgmyp6 但我想应该通过改变控制点来匹配线的斜率来实现。
  • 正在处理这个...很快就会添加答案...

标签: swift uibezierpath


【解决方案1】:

这里按照你的期望https://prnt.sc/sgmyp6我已经使用addQuadCurve函数来制作曲线。

拍了UIViewHeight = 200Width = 300

@IBOutlet weak var centerView: UIView!

 override func viewDidLoad() {
        super.viewDidLoad()
        let centerViewW = centerView.frame.size.width. //Width Of your view
        let centerViewH = centerView.frame.size.height //Height Of your view

        let myPath: UIBezierPath = UIBezierPath()
        let drawingLayer = CAShapeLayer()
        drawingLayer.strokeColor =  UIColor.red.cgColor
        drawingLayer.fillColor = UIColor.clear.cgColor
        drawingLayer.lineWidth = 4.0

        //This is starting point from where you start drawing
        myPath.move(to: CGPoint(x: 0, y: centerViewH-25))

        //This is First Curve
        myPath.addQuadCurve(to: CGPoint(x: ((centerViewW/2)+10), y: (centerViewH/3+15)), controlPoint: CGPoint(x: 40, y: 20))

        drawingLayer.path = myPath.cgPath
        centerView.layer.addSublayer(drawingLayer)

        //This is Second Curve
        myPath.addQuadCurve(to: CGPoint(x: centerViewW, y: (centerViewH/2)), controlPoint: CGPoint(x: (centerViewW - 45), y: (centerViewH/2)+40))

        drawingLayer.path = myPath.cgPath
        centerView.layer.addSublayer(drawingLayer)
}

您只需更新/更改控制点以匹配线的斜率。

输出:-

【讨论】:

  • 谢谢赛凡。工作正常,这是我所期待的结果。所以这都是关于控制点和两条线的斜率相互匹配。非常感谢。
  • 欢迎 Gshukakidze,尝试制作不同类型的曲线,以便您了解控制点的工作原理......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
相关资源
最近更新 更多