swiftui - 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
)
}
}
}
解决方案
也许我误解了你的问题,但如果你不想要任何动画onAppear,你为什么不用150初始化你的偏移量?相反,您从 0 开始并将其设置为 150 onAppear,这似乎是动画的原因,因为变量会更改 onAppear。
推荐阅读
- exception - F* 在匹配体中引发异常
- flutter - 将 RTL 添加到 ListView.builder 水平颤动
- ramda.js - RamdaJS - 如何使用具有同步和异步功能的管道?
- python - exec() 函数返回无
- powerquery - 如何将重复的行旋转到excel中的不同列
- android - Android-Kotlin 控制来自 firebase push() 的可为空字符串
- django - 使用 facebook 验证 graphql 的正确方法
- django - 在 django 中使用 URL 模板标签的问题
- r - 确定汽车和非汽车模式之间最多1小时的时差
- ssl-certificate - 使用 HTTPS 服务的 SSL 证书先决条件