首页 > 解决方案 > SwfitUI 中的 .onAppear 修饰符是否有相反的含义?

问题描述

我创建了一个自定义水平滚动,它使用动画来滚动。呈现视图时,它使用动画来呈现视图。

因此,当我调用视图并启动 onAppear 时,它会通过动画更改偏移量,但这种行为是不需要的。我不想在创建视图时为我的视图设置动画。

我试图创建@State 变量

    @State private var myBool = false

并创造条件:

     .animation(self.myBool ? Animation.spring : .none)

然后在 .onAppear

     .onAppear(
         ...
            some code that changing state variables
         ...
         self.myBool = true
     )

但它不起作用,即使 myBool 为假,它仍然使用动画

如何仅在创建主体后才允许动画?我的意思是,是否有修饰符 .onFinish?

这是代码示例:

   struct scroll: View {
       @State var offset: 0

       var body: some View {
          GeometryReader { geo in
              HStack {

                   ForEach(0..<5) { i in
                       Rectangle()
                   }

               }
                .gesture(DragGesture()
                 .onChange ({ (value) in
                     self.offset = value.translation.width
                 }
                 .onEnded ({ _ in
                     self.offset = 50

                 }


            )
            .offset(x: self.offset)
            .animation(.spring)
            .onAppear (
                self.offset = geo.size.width
            )
            }
       }
   }

标签: swiftui

解决方案


也许我误解了你的问题,但如果你不想要任何动画onAppear,你为什么不用150初始化你的偏移量?相反,您从 0 开始并将其设置为 150 onAppear,这似乎是动画的原因,因为变量会更改 onAppear。


推荐阅读