如何仅将.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)
}
}发布于 2020-09-07 11:40:35
所提供的快照是不可测试的,所以只是一个想法-尝试将动画限制为显式的偏移值,如
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 !!
}
}https://stackoverflow.com/questions/63770120
复制相似问题