SwiftUI Как заставить круговую анимацию работать в обоих направлениях - PullRequest
0 голосов
/ 08 марта 2020

У меня есть такая круговая анимация, и я хочу, чтобы она отображалась из центра экрана, а затем скрывалась в центре экрана. Теперь это работает так или иначе, но не оба.

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()
  }

Если я применяю только вставку, то все работает нормально, покажите ОТ центра. Если я применяю только удаление, то это работает нормально скрыть центр. Но тогда другой способ не работает правильно. Существует довольно непрозрачный переход.

1 Ответ

0 голосов
/ 08 марта 2020

Я нашел решение

  1. Требуется регулярный переход к асимметрии c, так как это тот же (только обращенный) переход. Так что

     return AnyTransition.modifier(
                active: ClipShapeModifier(shape: ScalableCircle(percent: 0).offset(offset)),
                identity: ClipShapeModifier(shape: ScalableCircle(percent: 1).offset(offset))
            )
    
  2. важно применить .zIndex (1) к причине переходного вида, при этом скрывая, что он идет под новым появляющимся видом с изменяющейся непрозрачностью

    ZStack {

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