【发布时间】:2020-05-15 15:16:38
【问题描述】:
我创建了一个自定义水平滚动,它使用动画来滚动。 当视图呈现时,它使用动画来呈现视图。
因此,当我调用视图并启动 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
)
}
}
}
【问题讨论】:
-
我不确定我是否理解问题所在。您能否提供一些工作演示代码或屏幕录像来删除不需要的效果?
-
我编辑了代码示例我在应用 onChange 和 onEnded 时得到了动画 而且 onAppear 也使用动画,因为它改变了偏移量我的问题是我不想在 onAppear 中使用动画
标签: swiftui