ios SwiftUI .symbolEffect动画无法正常工作

mwg9r5ms  于 2023-10-21  发布在  iOS
关注(0)|答案(2)|浏览(164)

我有这样的意见时,点击图像动画的特定图像应被触发。然而,它似乎是非常不一致的,出于某种原因触发其他图像以及。
我是不是漏掉了什么?

struct ImagesView: View {
    
    let segments: [String] = ["1", "2", "3", "4"]
    @State private var selected: String = "1"
    @Namespace var name

    var body: some View {
        HStack(spacing: 0) {
            ForEach(segments, id: \.self) { segment in
                ZStack {
                    ImageView(tab: segment, selected: $selected)
                        .padding()
                }

            }
        }
    }
}

fileprivate struct ImageView: View {
    
    var tab: String
    
    @Binding var selected: String
    @State var animate = false
    
    var body: some View {
        Image(systemName: "calendar")
            .font(.largeTitle)
            .symbolRenderingMode(.monochrome)
            .symbolEffect(.bounce, value: animate)
            .onTapGesture {
                selected = tab
            }
            .onChange(of: selected) { _, newValue in
                withAnimation {
                    animate = newValue == tab
                }
            }
    }
}
ltskdhd1

ltskdhd11#

每当animate发生变化时,动画就会发生,而不是每当它是true时。想想当你点击一个图像时,这条线会引起什么样的动画。

animate = newValue == tab

对于您点击的图像,animate最初将是false,因为上次运行时,newValue == tab为false。现在,newValue == tabtrue。所以你点击的图像是动态的。
对于先前选择的图像,animate最初将是truenewValue == tab将是false,因为您选择了不同的图像。这意味着先前选择的图像也将被动画化。
实际上,您只需要在newValue == tab为true时更改animate

if newValue == tab {
    animate.toggle()
}

(我不确定animate是否是一个好名字,也许animationTrigger更好)

zd287kbt

zd287kbt2#

这可能是工作

Image(yourImage)
   .contentShape(Rectangle())

相关问题