swift - SwiftUI 视图层次结构中较高的动画覆盖嵌套动画
问题描述
我有一个 SwiftUI View
,它有一个重复的动画onAppear
。当该视图在包含另一个动画的视图层次结构中使用时,更高级别的动画会覆盖嵌套的动画。考虑以下基本示例:
struct Example: View {
@State private var opacity: Double = 0
var body: some View {
Text("Example")
.opacity(opacity)
.onAppear() {
withAnimation(Animation.easeInOut(duration: 2).repeatForever(autoreverses: true)) {
self.opacity = 1
}
}
}
}
在类似于以下的上下文中使用它时,重复动画不会运行。如果我从此堆栈中删除动画,则重复动画将按预期工作。
struct Parent: View {
var body: some View {
VStack {
Example()
}
.animation(.easeInOut)
}
}
我如何构建它以允许两个动画工作?当孩子被添加到时,VStack
他们应该根据该视图的动画属性进行动画处理,但他们也应该保留自己定义的动画。是否有一些关于动画的文档以及我在某处遗漏的它们之间的界限?
解决方案
您需要将内部动画链接到特定的状态变量,然后它将是独立的。
使用 Xcode 12 / iOS 14 测试
var body: some View {
Text("Example")
.opacity(opacity)
.animation(Animation.easeInOut(duration: 2).repeatForever(autoreverses: true),
value: opacity) // << here !!
.onAppear() {
self.opacity = 1
}
}
推荐阅读
- reactjs - 在 Axios 中使用 Redux-Observable 的问题
- visual-studio - 当从 TFS 2017 中的主代码而不是搁置代码生成工件时,如何触发发布管道?
- html - 更改图标颜色的问题
- mule - 如何确定文件是否已通过 Mule 中的自定义 SFTP 连接器完成下载?
- c# - VS2017 中的 SpecFlow 编译错误
- c++ - 碎片化 MP4 - 在浏览器中播放问题
- ruby-on-rails - Rackup 等效于定义的(Rails::Server)
- eos - eos 导师中的“你好”示例不起作用
- api - 如何使用 apigeetool 覆盖 api 代理部署
- jquery - 数据表引导集合