swift - 如何仅对一个特定的修改器更改应用动画?
问题描述
如何仅适用.animation
于.offset
同时保持其他修饰符更改不受其影响。在偏移量之后添加.animation
也会使字体大小发生变化。
// Main view
var body: some View {
GeometryReader { geo in
VStack {
DynamicText()
}
.frame(height: geo.size.height)
.offset(y: self.viewModel.offset ? 5.0 : 0)
.animation(.default)
}
}
// DynamicText view
var body: some View {
return GeometryReader { geo in
VStack {
Text("Foo")
.font(
.system(size: geo.size.height * 0.95, weight: .regular, design: .monospaced))
.minimumScaleFactor(0.05)
.lineLimit(1)
.foregroundColor(Color("primary"))
}
.frame(height: geo.size.height)
}
}
还尝试将.animation(nil)
上面的修饰符放入无意动画,但是,它也会阻止动画的偏移。由于ZStack
包含不同的条件渲染DynamicText
,动画修改器还应用了内容更改之间的淡入淡出过渡,这是我想要避免的。
// Main view
var body: some View {
GeometryReader { geo in
VStack {
DynamicText()
}
.animation(nil)
.frame(height: geo.size.height)
.offset(y: self.viewModel.offset ? 5.0 : 0)
.animation(.default)
}
}
解决方案
提供的快照是不可测试的,所以只是一个想法 - 尝试将动画显式限制为偏移值,例如
var body: some View {
GeometryReader { geo in
VStack {
DynamicText()
}
.frame(height: geo.size.height)
.offset(y: self.viewModel.offset ? 5.0 : 0)
.animation(.default, value: self.viewModel.offset) // << here !!
}
}
推荐阅读
- javascript - 如何从数字数组中删除数学抵消值?
- swift - 使用组合组合先前的值
- c++ - 将共享库与 GCC 链接时的问题
- java - 我们如何 fork opencv-android repo 并在自己的项目中使用它?
- cryptocurrency - TradingView 图表库:如何在图表中添加加密货币交换符号?
- javascript - 使用 react material-ui 对话框进行奇怪的重新渲染行为
- python - 如何使此函数中的代码重复?(Python)
- python - atexit._run_exitfuncs 中的 Python concurrent.futures 错误:OSError:句柄已关闭,仅在 Visual Studio 调试模式下运行
- python - 将列表转换为字符串?
- python - 在字符前提取单词