我想在一个圆上的两个点之间绘制一个半圆。主要代表一个时钟,我想画另一条线代表一个小时到另一个小时的进度,因此积分的位置可能会有所不同。首先,我知道我感兴趣的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处。
最佳答案
我已经尝试了您的代码,如果点实际上在该圆周上,它将对我有用
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)
或例如:
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点之间的半圈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59742613/