我实现了一个带有一些按钮的圆形菜单。
我初始化了节点上的所有按钮,并使用以下功能将它们放在圆上:
func placeButtonsOnCircle(index: Int) -> Transform {
let size = Double(buttonsNode.contents.count)
let endValue = fanMenu.interval.1
let startValue = fanMenu.interval.0
let interval = endValue - startValue
var step: Double = 1.0
if interval.truncatingRemainder(dividingBy: 2 * Double.pi) < 0.00001 {
// full circle
step = interval / size
} else {
step = interval / (size - 1)
}
// First and last button of the fanMenu
let firstBtn = fanMenu.items.first
let lastBtn = fanMenu.items.last
let alpha = startValue + step * Double(index + 1)
return Transform.move(
// Place the button on the x-axis
dx: cos(alpha) * fanMenu.menuRadius,
// Place the buttons on the y-axis
dy: sin(alpha) * fanMenu.menuRadius
)
}
fanMenu.interval = (1.5, 2.0 * .pi)
This是FanMenu的代码。按钮在单独的类中初始化。 FanMenu是GitHub的一个项目,但我必须根据需要对其进行更新。
现在的问题是,是否可以抓住第一个和最后一个按钮并将其放置在圆圈之外。