我有一组按钮,我显示了顺时针旋转,但我不能正确地点击它们:
我觉得偏移量有问题,但我不知道如何解决,有什么建议吗?
这是密码:
struct CategoryView: View {
// Circle Radius
@State private var radius: Double = 150
let circleSize: Double = 350
// Degree of circle
@State private var degree = -90.0
let cards = ["John", "Mark", "Alex", "Kevin", "Jimmy"]
var body: some View {
ZStack {
let anglePerCount = Double.pi * 2.0 / Double(cards.count)
ForEach(0..<cards.count, id: \.self) { index in
let angle = Double(index) * anglePerCount
let xOffset = CGFloat(radius * cos(angle))
let yOffset = CGFloat(radius * sin(angle))
Button {
} label: {
Text(cards[index])
.font(.title)
.fontWeight(.bold)
.rotationEffect(Angle(radians: angle + Double.pi/2))
.offset(x: xOffset, y: yOffset)
}
}
}
.rotationEffect(Angle(degrees: degree))
.onAppear() {
radius = circleSize/2 - 47 // 47 is for padding
}
}
}
1条答案
按热度按时间idfiyjo81#
这是一个简单的错误,所有SwiftUI开发者都犯过无数次。你修改的是标签,而不是实际的按钮本身。只需将修改器移动到按钮即可。
在SwiftUI中,几乎所有的东西都是
View
,可以被这样对待。一个按钮,也是一个视图,可以有大部分与Text
相同的修饰符。在你的问题中,你改变了按钮的内部视图,而不是实际的按钮本身。这就是为什么当你点击中间时,它看起来位置不对,但事实上它也完全按照你告诉它的做了。这是一件重要的事情要记住,因为你实际上可以推,拉,偏移视图之外的东西,这使得一些有趣的布局;布局,如侧菜单或模态。