Swiftui SwfitUI中是否有与.onAppear相反的修饰语?

Swiftui SwfitUI中是否有与.onAppear相反的修饰语?,swiftui,Swiftui,我创建了一个自定义水平滚动,它使用动画来滚动。 显示视图时,它使用动画来显示视图 因此,当我调用视图并启动onAppear时,它会用动画更改偏移量,但这种行为是不需要的。我不想在创建视图时设置它们的动画 我试图创建@State变量 @State private var myBool = false 并创造一个条件: .animation(self.myBool ? Animation.spring : .none) 然后在里面,看起来 .onAppear(

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

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

我试图创建@State变量

    @State private var myBool = false
并创造一个条件:

     .animation(self.myBool ? Animation.spring : .none)
然后在里面,看起来

     .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
            )
            }
       }
   }
struct滚动:查看{
@状态变量偏移量:0
var body:一些观点{
GeometryReader{geo-in
HStack{

ForEach(0..也许我误解了你的问题,但如果你不想看到任何动画,为什么不将偏移量初始化为150?
相反,您从0开始,并将其设置为150 onAppear,这似乎是动画的原因,因为变量在appear上发生变化。

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

struct scroll: View {
    var body: some View {
        GeometryReader { geo in
            innerScroll(offset: geo.size.width) // << here !!
        }
    }

    struct innerScroll: View {        // inner subview
        @State var offset: CGFloat

        var body: some View {
            HStack {
                ForEach(0..<5) { i in
                    Rectangle()
                }
            }
            .gesture(DragGesture()
            .onChanged { (value) in
                self.offset = value.translation.width
            }
            .onEnded { _ in
                self.offset = 50

                }
            )
                .offset(x: self.offset)
                .animation(.spring())
        }
    }
}
struct滚动:查看{
var body:一些观点{
GeometryReader{geo-in

内部滚动(偏移量:geo.size.width)//我不确定我是否理解这个问题。你能提供一些正在运行的演示代码或屏幕记录来删除不希望出现的效果吗?我编辑了代码示例,当onChange应用时,我得到了动画,并且onEnded,onAppear使用动画,因为它更改了偏移量。我的问题是,我不想在onApp中使用动画earYes这是一个很好的解决方案,但我使用的是几何读取器。我无法修改几何读取器外部的偏移量,因此我需要使用onAppear我将更新样本代码是的,这是一个很好的解决方案,但我使用的是几何读取器。我无法修改几何读取器外部的偏移量,因此我需要使用onAppear我将更新样本code@Kevin, 无论如何,最好是通过初始化,只是有点不同-见更新。