我是iOS开发人员的新手,目前我正试图找出如何定位在ForEach循环中创建的单个View的方法。
基本上我有三种形状(标志),我想添加一下功能:当轻击标志时,标志可以旋转360度。我有动画(旋转)部分,但我的问题是我无法弄清楚如何定位被点击的单个标志,而是由所有三个标志执行动画。
ForEach(0 ..< 3, id: \.self) { number in
Button(action: {
self.flagTapped(number)
withAnimation {
self.animationAmount += 360
}
self.askQuestion()
}) {
FlagImage(name: self.countries[number], number: number)
}
.rotation3DEffect(.degrees(self.animationAmount), axis: (x: 0, y: 1, z: 0))
}
到目前为止,这是我的代码,它所做的就是我之前解释的内容,它可以进行360度旋转,但是对于所有三个标志(而不是正在被点击的三个标志),我也尝试使用onTapGesture进行操作,但是没有似乎有效。谢谢您的帮助!
答案 0 :(得分:0)
这是一个演示如何实现的示例(由于缺少自定义值,我在快照中使用了一些标准的东西,但是这个主意应该很明显)。
struct TestTargetButton: View {
let countries = ["shield", "triangle", "square"]
@State var selection: Int? = nil
@State var animationAmount: Double = 0
var body: some View {
HStack {
ForEach(0 ..< 3, id: \.self) { number in
Button(action: {
self.selection = number
withAnimation {
self.animationAmount += 360
}
}) {
Image(systemName: self.countries[number])
.resizable()
.frame(width: 50, height: 50)
.padding()
}
.rotation3DEffect(.degrees(self.selection == number ? self.animationAmount : 0), axis: (x: 0, y: 1, z: 0))
}
}
}
}