遇到的問題:
截屏2023-12-22 14.52.28.png
前置情況:
邊界是通過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()
當然第一種情況,可以實現另外的一種“功能”。