平滑打开 UIBezierPath
Smooth open UIBezierPath
我正在尝试使圆弧和曲线的边缘平滑。
SKShapeNodes 是开放的 UIBezierPaths,具有较粗的线宽,但是,弧形和曲线周围的锯齿状边缘很明显。改变平面度似乎没有任何效果。有没有办法平滑这些,或者我将不得不制作一个没有线宽的封闭 UIBezierPath?
您需要创建没有线宽的封闭式 UIBezierPath
还
使其成为 shouldRasterize = true
并设置适当的比例 rasterizationScale = 2 * UIScreen.main.scale
我有办法解决我的问题。现在,我不再使用 path.addArc(),而是使用一个函数来沿弧线获取尽可能多的点,然后对这些点中的每一个点使用 path.addLine()。如果你想要更多的点以获得更平滑的路径,只需降低 n 的值即可。
func getCirclePoints(centerPoint: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) -> [CGPoint] {
let n : CGFloat = clockwise ? -1 : 1
let points: [CGPoint] = stride(from: startAngle - n, through: endAngle + n, by: n).map {
let degreesToRadians = CGFloat([=10=]) * .pi / 180
let x = centerPoint.x + radius * cos(degreesToRadians)
let y = centerPoint.y + radius * sin(degreesToRadians)
return CGPoint(x: x, y: y)
}
return points
}
我正在尝试使圆弧和曲线的边缘平滑。
SKShapeNodes 是开放的 UIBezierPaths,具有较粗的线宽,但是,弧形和曲线周围的锯齿状边缘很明显。改变平面度似乎没有任何效果。有没有办法平滑这些,或者我将不得不制作一个没有线宽的封闭 UIBezierPath?
您需要创建没有线宽的封闭式 UIBezierPath
还
使其成为 shouldRasterize = true
并设置适当的比例 rasterizationScale = 2 * UIScreen.main.scale
我有办法解决我的问题。现在,我不再使用 path.addArc(),而是使用一个函数来沿弧线获取尽可能多的点,然后对这些点中的每一个点使用 path.addLine()。如果你想要更多的点以获得更平滑的路径,只需降低 n 的值即可。
func getCirclePoints(centerPoint: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) -> [CGPoint] {
let n : CGFloat = clockwise ? -1 : 1
let points: [CGPoint] = stride(from: startAngle - n, through: endAngle + n, by: n).map {
let degreesToRadians = CGFloat([=10=]) * .pi / 180
let x = centerPoint.x + radius * cos(degreesToRadians)
let y = centerPoint.y + radius * sin(degreesToRadians)
return CGPoint(x: x, y: y)
}
return points
}