遇到的问题:
前置情况:
边界是通过UIBezierPath画的一个圆弧+“直线”。
let path = UIBezierPath()
path.addArc(withCenter: centerPoint, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
let lineToStartPoint = CGPoint(x: centerPoint.x + radius * cos(startAngle), y: centerPoint.y + radius * sin(startAngle))
//这儿是用直线直接连接。
path.addLine(to: lineToStartPoint)
path.close()
解决方法:
let path = UIBezierPath()
path.addArc(withCenter: centerPoint, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
let lineToStartPoint = CGPoint(x: centerPoint.x + radius * cos(startAngle), y: centerPoint.y + radius * sin(startAngle))
//用弧线方式连接两个点,但是控制点也在两点直接的直线上,从而实现直线效果+碰撞反馈。
path.addQuadCurve(to: lineToStartPoint, controlPoint: CGPoint(x: centerPoint.x, y: lineToStartPoint.y))
path.close()
当然第一种情况,可以实现另外的一种“功能”。