我创建了一个自定义的水平滚动,该滚动使用动画进行滚动。 呈现视图时,它使用动画来呈现视图。
因此,当我调用视图并启动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
)
}
}
}
答案 0 :(得分:1)
也许我对您的问题有误解,但是如果您不希望出现任何动画,为什么不使用150初始化偏移量呢? 而是从0开始并将其设置为150 onAppear,这似乎是动画的原因,因为变量更改了onAppear。
答案 1 :(得分:1)
正如我现在看到的,您只需要直接设置初始值
<FormSpy />