Каждый элемент в настоящее время анимируется, потому что все они полагаются на hovered
, чтобы увидеть, находится ли Circle
над ним. Чтобы исправить это, мы можем сделать так, чтобы каждый круг имел свое состояние hovered
.
struct CircleView: View {
@State var hovered = false
var body: some View {
Circle().fill(Color.red).frame(width: 50, height: 50)
.scaleEffect(self.hovered ? 2.0 : 1.0)
.animation(.default)
.onHover { hover in
print("Mouse hover: \(hover)")
self.hovered.toggle()
}
}
}
, а в ForEach
мы можем просто вызвать новый CircleView
, где каждый Circle
имеет свой собственный источник истины.
struct ContentView : View {
var body: some View {
VStack(spacing: 90) {
ForEach(0..<2) { _ in
HStack(spacing: 90) {
ForEach(0..<4) { _ in
CircleView()
}
}
}
}
.frame(minWidth:300,maxWidth:.infinity,minHeight:300,maxHeight:.infinity)
}
}