SwiftUI视图层次结构中较高的动画覆盖嵌套动画

SwiftUI视图层次结构中较高的动画覆盖嵌套动画,swift,swiftui,Swift,Swiftui,我有一个SwiftUI视图,其中有一个反复出现的动画。在包含另一动画的视图层次中使用该视图时,较高级别的动画将覆盖嵌套的动画。考虑下面的基本例子: struct示例:视图{ @状态私有变量不透明度:Double=0 var body:一些观点{ 文本(“示例”) .不透明度(不透明度) .onAppear(){ withAnimation(Animation.easeInOut(持续时间:2)。repeatForever(自动翻转:true)){ self.opacity=1 } } } }

我有一个SwiftUI
视图
,其中有一个反复出现的动画
。在包含另一动画的视图层次中使用该视图时,较高级别的动画将覆盖嵌套的动画。考虑下面的基本例子:

struct示例:视图{
@状态私有变量不透明度:Double=0
var body:一些观点{
文本(“示例”)
.不透明度(不透明度)
.onAppear(){
withAnimation(Animation.easeInOut(持续时间:2)。repeatForever(自动翻转:true)){
self.opacity=1
}
}
}
}
在类似于以下内容的上下文中使用此选项时,重复动画不会运行。如果从该堆栈中删除动画,则重复动画将按预期工作

结构父级:视图{ var body:一些观点{ VStack{ 示例() } .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
      }
  }
var主体:一些视图{
文本(“示例”)
.不透明度(不透明度)
.animation(animation.easeInOut(持续时间:2)。repeatForever(自动反转:true),
值:不透明度)//