Swiftui 无法更改@Binding的值,以及如何仅从一个切换状态设置视图动画

Swiftui 无法更改@Binding的值,以及如何仅从一个切换状态设置视图动画,swiftui,Swiftui,所以这一开始只是一个问题,但试图回答第一个问题会导致我回答第二个问题。因此,问题是: 我最初的问题是,是否可以通过从justfalse到true和notfalse到true来设置视图的动画。例如,在下面的代码中 图像(系统名称:isTrue?“heart.fill”:“heart”) .animation(.easeIn,值:isTrue) 第二个问题源于第一个问题,因为父视图总是将属性设置为false(也是整个视图由于其他状态属性而重新渲染),并且在重新渲染时,它总是为心脏设置动画 无法使

所以这一开始只是一个问题,但试图回答第一个问题会导致我回答第二个问题。因此,问题是:

  • 我最初的问题是,是否可以通过从justfalse到true和notfalse到true来设置视图的动画。例如,在下面的代码中

    图像(系统名称:isTrue?“heart.fill”:“heart”) .animation(.easeIn,值:isTrue)

  • 第二个问题源于第一个问题,因为父视图总是将属性设置为false(也是整个视图由于其他状态属性而重新渲染),并且在重新渲染时,它总是为心脏设置动画

  • 无法使用@Binding从子视图更改属性吗?由于某些原因,我无法编辑绑定中的值(如下所示)。我知道@Binding不拥有该视图,但我认为它具有读/写功能

    下面是一个gif,显示了我的意思和相关代码:

    import SwiftUI
    
    struct FirstView: View {
        @State var isOn = false
        var body: some View {
            VStack {
                ZStack {
                    
                    RoundedRectangle(cornerRadius: 25.0)
                        .frame(height: 200)
                    Image(systemName: isOn ? "heart.fill" : "heart")
                        .foregroundColor(.red)
                        .scaleEffect(isOn ? 1.5 : 1.0)
                        .offset(x: 10.0, y: 10.0)
                        .animation(.easeIn)
                }
                Toggle(isOn: $isOn) {
                    Text("First View - Should change and animate")
                }
            }
            
        }
    }
    
    struct FirstView_Previews: PreviewProvider {
        static var previews: some View {
            FirstView()
        }
    }
    
    struct SecondView: View {
        @Binding var isOn: Bool
        var body: some View {
            VStack {
                FirstView()
                Toggle(isOn: $isOn, label: {
                    Text(" 2nd View - Change but don't animate")
                })
            }
        }
    }
    
    struct SecondView_previews: PreviewProvider {
        static var previews: some View {
            SecondView(isOn: .constant(false))
        }
    }
    

    问题1 您需要一个动画,该动画根据isOn的状态而变化

    //在视图上
    .动画(动画,值:isOn)
    //定义变量动画
    动画:动画?{
    伊森?动画。伊森:零
    }
    
    问题2
    您已经可以使用.animation的值限制版本了。这将限制层次结构中的任何更改仅限于该绑定值中的更改。

    感谢您使用干净、易于复制的粘贴代码片段提出这个问题。