iOS:逆时针UIBezierPath从垂直向下起始的角度计算与按百分比描边
解决iOS中从负Y轴起始的逆时针UIBezierPath圆弧问题
首先得明确一个核心前提:iOS里的UIBezierPath圆弧角度坐标系和常规数学坐标系不一样——正X轴为0弧度,顺时针旋转时角度数值增大,这是很多人搞混方向的关键!
核心参数梳理
要实现你要的效果(逆时针、从负Y轴起始),我们需要明确这几个点:
- 负Y轴对应的弧度是
3 * CGFloat.pi / 2(或者等价的-CGFloat.pi / 2,两者在圆弧绘制中是同一个位置) - 绘制方向参数
clockwise要传false(代表逆时针绘制) - 结束角度的计算逻辑:因为iOS坐标系中逆时针是角度数值减小的方向,所以如果要从负Y轴逆时针旋转θ弧度,结束角度 = 起始角度 - θ
具体代码示例
1. 绘制完整的逆时针圆弧(从负Y轴出发绕一圈回到原点)
let center = CGPoint(x: 150, y: 150) // 圆弧中心 let radius: CGFloat = 80 // 半径 let startAngle = 3 * CGFloat.pi / 2 // 起始点:负Y轴 let endAngle = startAngle - 2 * CGFloat.pi // 结束点:绕逆时针一圈后回到负Y轴(等价于 -CGFloat.pi/2) let fullCirclePath = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: false)
2. 绘制从负Y轴逆时针转90°到负X轴的圆弧
let startAngle = 3 * CGFloat.pi / 2 let endAngle = CGFloat.pi // 负X轴对应的弧度 let quarterPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: false)
3. 绘制从负Y轴逆时针转180°到正Y轴的圆弧
let startAngle = 3 * CGFloat.pi / 2 let endAngle = CGFloat.pi / 2 // 正Y轴对应的弧度 let halfPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: false)
关键逻辑总结
- 永远记住iOS的角度基准:正X=0,顺时针角度变大,负Y固定对应
3π/2弧度 - 逆时针绘制时,
clockwise设为false,结束角度要小于起始角度(如果旋转角度小于2π),或者用起始角度减去2π来绘制完整圆 - 如果你觉得用负数角度更直观,也可以直接把起始角度设为
-CGFloat.pi/2,计算逻辑是一样的,比如完整圆可以写成:
let startAngle = -CGFloat.pi / 2 let endAngle = startAngle - 2 * CGFloat.pi
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

