当用户点击它时,我正在尝试为按钮设置动画。它在侧面偏移,使它看起来像是被按下了。
如果您查看图像,您应该会明白为什么我要通过偏移它来制作动画,因为我在按钮后面有一个偏移的背景,并且按钮在单击时应该与该框架匹配。
目前,点击时按钮动画如图所示,但所有按钮动画都被按下,并且在点击发生后它们不会返回到原始位置。
点击前的按钮
点击后的按钮
下面是按钮数组:
@State private var isClicked = false
let buttons: [[CalcButton]] = [
[.clear, .plusMinus, .percent, .divide],
[.seven, .eight, .nine, .multiply],
[.four, .five, .six, .minus],
[.one, .two, .three, .add],
[.zero, .doubleZero, .decimal, .equals]
]
ForEach(buttons, id: \.self) { row in
HStack(spacing: 20) {
ForEach(row, id: \.self) { item in
Button(action: {
withAnimation {
self.animation()
}
} , label: {
ZStack {
Rectangle()
.frame(width: buttonWidth(button: item), height: buttonHeight())
.foregroundColor(.backgroundColor)
.offset(x: 7.0, y: 7.0)
Rectangle()
.frame(width: buttonWidth(button: item), height: buttonHeight())
.foregroundColor(.white)
Text(item.rawValue)
.font(.custom("ChicagoFLF", size: 27))
.frame(width: buttonWidth(button: item), height: buttonHeight())
.foregroundColor(.backgroundColor)
.border(Color.backgroundColor, width: 4)
.offset(x: isClicked ? 7 : 0, y: isClicked ? 7 : 0)
}
})
}
}
.padding(.bottom, 10)
}
这是切换 isClicked 状态变量的函数
func animation() {
self.isClicked.toggle()
}