如何只申请.animation
to .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 !!
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)