我想在一个圆上的两个点之间绘制一个半圆。主要代表一个时钟,我想画另一条线代表一个小时到另一个小时的进度,因此积分的位置可能会有所不同。首先,我知道我感兴趣的2个点的X和Y。这就是我尝试在UIBezierPath中添加角度的方法。我的问题是新圈子正确开始,但在完全随机的位置结束

let firstAngle = atan2(redPoint.y - circleCenter.y, redPoint.x - circleCenter.x)

let secondAngle = atan2(bluePoint.y - circleCenter.y, bluePoint.x - circleCenter.x) ```



    let circlePath1 = UIBezierPath(arcCenter: circleCenter,
                                   radius: circleRadius,
                                   startAngle: firstAngle,
                                   endAngle: secondAngle,
                                   clockwise: true) ```


无论我在何处设置redPoint,圆圈都将从正确的位置开始,但是圆圈永远不会在bluePoint处。

ios - 2 CG点之间的半圈-LMLPHP

最佳答案

我已经尝试了您的代码,如果点实际上在该圆周上,它将对我有用

    let redPoint = CGPoint(x: 100.0, y: 200.0)
    let bluePoint = CGPoint(x: 100.0, y: 0.0)
    let circleCenter = CGPoint(x: 100.0, y: 100.0)

    let circleRadius = CGFloat(100.0)

    let firstAngle = atan2(redPoint.y - circleCenter.y, redPoint.x - circleCenter.x)

    let secondAngle = atan2(bluePoint.y - circleCenter.y, bluePoint.x - circleCenter.x)

    let path = UIBezierPath(arcCenter: circleCenter,
                                radius: circleRadius,
                                startAngle: firstAngle,
                                endAngle: secondAngle,
                                clockwise: true)

    //Path in layer
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath
    shapeLayer.strokeColor = UIColor.red.cgColor
    shapeLayer.lineWidth = 1.0

    self.view.layer.addSublayer(shapeLayer)


ios - 2 CG点之间的半圈-LMLPHP

或例如:

    let redPoint = CGPoint(x: 200.0, y: 100.0)
    let bluePoint = CGPoint(x: 100.0, y: 0.0)
    let circleCenter = CGPoint(x: 100.0, y: 100.0)

    let circleRadius = CGFloat(100.0)


你得到:

ios - 2 CG点之间的半圈-LMLPHP

但是,如果使用的坐标实际上不在圆周上,则会得到错误的结果。我的建议是检查您的输入,并最终检查点是否属于您想要的圆周。

关于ios - 2 CG点之间的半圈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59742613/

10-13 01:08