Переходное масштабирование текста в Swiftui, когда предыдущий плавный переход заканчивается для того же текста

У меня есть два текста в представлении SwiftUI и два@Stateобертки. Когда появляется вид, первый текст виден, а второй нет. Через несколько секунд первый текст исчезнет, ​​а второй текст должен появиться одновременно. Все идет нормально. Теперь вот моя проблема... после того, как второй текст исчезает, через несколько секунд тот же второй текст с именемText("HELLO FROM THE OTHER SIDE")приходится уменьшать масштаб. Это проблема, которая у меня есть. Как мне изменить код, чтобы я мог вызвать переход уменьшения масштаба, называемыйTextZoomOutTransitionтакже? Вот код:

      import SwiftUI

struct Transitions: View {
   
@State changeText: Bool
@State zoomText: Bool

    private var TextFadeOut: AnyTransition {
        .opacity
        .animation(
            .easeOut(duration: 0.3)
        )
    }
    
    private var TextFadeIn: AnyTransition {
        .opacity
        .animation(
            .easeIn(duration: 0.3)
        )
    }
    
    private var TextZoomOutTransition: AnyTransition {
        return .asymmetric(
            insertion: .opacity,
            removal: .scale(
                scale: 1000, anchor: UnitPoint(x: 0.50, y: 0.45))
            .animation(
                .easeInOut(duration: 2.0)
                .delay(0.1)
            )
        )
    }
    
    public var body: some View {
        
        ZStack(alignment: .center) {
            Color.clear
         
            
            VStack(spacing: 24) {
                
                if !changeText  {
                    Text("HELLO THERE")
                        .transition(TextFadeOut)
                } else if !zoomText {
                    Text("HELLO FROM THE OTHER SIDE")
                        .transition(TextFadeIn)
                }
            }
}
 .onAppear {
            zoomText = false
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                changeText = true
            }
            DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
                zoomText = true
            }
        }
}
}

0 ответов

Другие вопросы по тегам