Animation SwiftUI如何使循环动画在两个方向上工作

Animation SwiftUI如何使循环动画在两个方向上工作,animation,swiftui,transition,Animation,Swiftui,Transition,我有这样的自定义圆形动画,我想让它从屏幕中心显示,然后隐藏到屏幕中心。 现在它以一种或另一种方式工作,但不能两者兼而有之 return AnyTransition.asymmetric( insertion: AnyTransition.modifier( active: ClipShapeModifier(shape: ScalableCircle(percent: 0).offset(offset)),

我有这样的自定义圆形动画,我想让它从屏幕中心显示,然后隐藏到屏幕中心。 现在它以一种或另一种方式工作,但不能两者兼而有之

return AnyTransition.asymmetric(
            insertion: AnyTransition.modifier(
                active: ClipShapeModifier(shape: ScalableCircle(percent: 0).offset(offset)),
                identity: ClipShapeModifier(shape: ScalableCircle(percent: 1).offset(offset))
            ),
            removal: AnyTransition.modifier(
                active: ClipShapeModifier(shape: ScalableCircle(percent: 1).offset(offset)),
                identity: ClipShapeModifier(shape: ScalableCircle(percent: 0).offset(offset))
            )
        )
在这里我显示/隐藏视图

if showOnboarding {
            OnboardingView()
     .transition(.circularReveal())
 } else {
                    ContentView()
  }
如果我只应用插入,那么它可以从中心显示。 如果我只应用删除,那么它可以隐藏到中心。 但另一种方法不能正常工作。有相当多的不透明度转换。

我找到了解决方案

  • 需要定期转换到asymetric,因为这是相同的(仅恢复)转换。所以

     return AnyTransition.modifier(
                active: ClipShapeModifier(shape: ScalableCircle(percent: 0).offset(offset)),
                identity: ClipShapeModifier(shape: ScalableCircle(percent: 1).offset(offset))
            )
    
  • 将.zIndex(1)应用于转换视图是很重要的,因为在隐藏时,它会随着不透明度的变化而移动到新出现的视图下面

    ZStack{

            if showOnboarding {
                OnboardingView()
    
                    .transition(.circularReveal())
                    .zIndex(1)
            } else {
                ContentView()
            }
    
        }