SwfitUI中的.onAppear修饰符是否与之相反?

时间:2020-05-15 15:16:38

标签: swiftui

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

因此,当我调用视图并启动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为false,它仍然会使用动画

如何仅在创建主体之后才允许动画? 我的意思是,是否有修饰符.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
            )
            }
       }
   }

2 个答案:

答案 0 :(得分:1)

也许我对您的问题有误解,但是如果您不希望出现任何动画,为什么不使用150初始化偏移量呢? 而是从0开始并将其设置为150 onAppear,这似乎是动画的原因,因为变量更改了onAppear。

答案 1 :(得分:1)

正如我现在看到的,您只需要直接设置初始值

<FormSpy />