iOS新增绘制圆的方法实例代码新增绘制圆的方法实例代码
主要给大家介绍了关于iOS新增绘制圆的方法,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一
定的参考学习价值,需要的朋友们下面来一起学习学习吧
iOS 的坐标系和我们几何课本中的二维坐标系并不一样!
# BezierPath绘制圆弧绘制圆弧
使用 UIBezierPath 进行绘制圆弧的方法,通常会直接使用 addArc :
addArc(withCenter:, radius:, startAngle:, endAngle:, clockwise:)
或者使用 addCurve 进行拟圆弧:
addCurve(to:, controlPoint1:, controlPoint2:)
其实我们可以通过,两个坐标点(startPoint & endPoint),和两点间的线段对应的圆弧的弧度(angle/radian)就能确定这个圆的
信息(半径radius, center), 所以我们是不是可以封装出只提供 start, end 和 angle 就能绘制 arc 的函数?
addArc(startPoint: , endPoint: , angle: , clockwise:)
# 计算两点间的距离计算两点间的距离
这里逻辑很简单不做赘述。
func calculateLineLength(_ point1: CGPoint, _ point2: CGPoint) -> CGFloat {
let w = point1.x - point2.x
let h = point1.y - point2.y
return sqrt(w * w + h * h)
}
# 计算两点间的夹角计算两点间的夹角
计算 point 和 origin 连线在 iOS 坐标系的角度
func calculateAngle(point: CGPoint, origin: CGPoint) -> Double {
if point.y == origin.y {
return point.x > origin.x ? 0.0 : -Double.pi
}
if point.x == origin.x {
return point.y > origin.y ? Double.pi * 0.5 : Double.pi * -0.5
}
// Note: 修正标准坐标系角度到 iOS 坐标系
let rotationAdjustment = Double.pi * 0.5
let offsetX = point.x - origin.x
let offsetY = point.y - origin.y
// Note: 使用 -offsetY 是因为 iOS 坐标系与标准坐标系的区别
if offsetY > 0 {
return Double(atan(offsetX / -offsetY)) + rotationAdjustment
} else {
return Double(atan(offsetX / -offsetY)) - rotationAdjustment
}
}
# 计算圆心的坐标计算圆心的坐标
如果你已经将几何知识丢的差不多了的话,我在这里画了个大概的草图,如下( angle 比较小时):