【问题标题】:Add an arrow end to the UIBezierPath addArc function向 UIBezierPath addArc 函数添加箭头末端
【发布时间】:2020-08-28 20:36:06
【问题描述】:

我正在尝试实现以下结果,直到 UIBezierPath 弧的末尾:

我找到了一个类似的答案here,但是它没有利用addArc函数,所以我不能设置开始和结束角度,写在obj-c上。

【问题讨论】:

    标签: swift core-graphics uibezierpath


    【解决方案1】:
    extension UIBezierPath {
        func addArrow(start: CGPoint, end: CGPoint, pointerLineLength: CGFloat, arrowAngle: CGFloat) {
            self.move(to: start)
            self.addLine(to: end)
    
            let startEndAngle = atan((end.y - start.y) / (end.x - start.x)) + ((end.x - start.x) < 0 ? CGFloat(Double.pi) : 0)
            let arrowLine1 = CGPoint(x: end.x + pointerLineLength * cos(CGFloat(Double.pi) - startEndAngle + arrowAngle), y: end.y - pointerLineLength * sin(CGFloat(Double.pi) - startEndAngle + arrowAngle))
            let arrowLine2 = CGPoint(x: end.x + pointerLineLength * cos(CGFloat(Double.pi) - startEndAngle - arrowAngle), y: end.y - pointerLineLength * sin(CGFloat(Double.pi) - startEndAngle - arrowAngle))
    
            self.addLine(to: arrowLine1)
            self.move(to: end)
            self.addLine(to: arrowLine2)
        }
        
    }
    

    用法:

        path.addArc(withCenter: center, radius: radius,
                    startAngle: angle1Inradians, endAngle: angle2Inradians,
                        clockwise: false)
    
        let pathCurrentPoint = path.currentPoint
        let x = center.x + radius * cos(angle1Inradians)
        let y = center.y - radius * sin(angle2Inradians)
        let point = CGPoint(x: x , y: y )
        path.addArrow(start: pathCurrentPoint, end: point, pointerLineLength: 10, arrowAngle: CGFloat(Double.pi / 4))
    
        let layer = CAShapeLayer()
        layer.fillColor = UIColor.clear.cgColor
        layer.lineWidth = 2
        layer.strokeColor = UIColor.orange.cgColor
        layer.path = path.cgPath
        self.layer.addSublayer(layer)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多