首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅为一个特定的修改器更改应用动画?

如何仅为一个特定的修改器更改应用动画?
EN

Stack Overflow用户
提问于 2020-09-07 08:42:12
回答 1查看 218关注 0票数 3

如何仅将.animation应用于.offset,同时保持其他修改器更改不受其影响。在偏移量之后添加.animation也会使字体大小的变化具有动画效果。

代码语言:javascript
复制
// 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,所以动画修改器还在内容更改之间应用淡入淡出过渡,这是我想要避免的。

代码语言:javascript
复制
// 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)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-07 11:40:35

所提供的快照是不可测试的,所以只是一个想法-尝试将动画限制为显式的偏移值,如

代码语言:javascript
复制
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 !!
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63770120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档