Различные анимации текста и фреймов с помощью MatchedGeometryEffect из-за изменения размера текста

Я приведу упрощенный случай.

Я меняю размер шрифта во время перехода на . Я анимирую изменение размера текста с помощьюмодификаторы, и все работает нормально. Однако во время анимации, когда текст перемещается в новую позицию, текстовая анимация отличается от анимации кадра, текст кажется выходящим за его границы, а не анимируется в тандеме с фреймом, хотя я применяю те же анимации по умолчанию. повсюду.

      struct SwiftUIView: View {
    
    @Namespace var namespace
    @State var move = false
    @State var font: CGFloat = 15
    
    var body: some View {
        
        VStack {
            Button("Move") {
                withAnimation {
                    move.toggle()
                }
            }
            
            if !move {
                Text("Some Text")
                    .font(.system(size: font))
                    .padding()
                    .background(
                        RoundedRectangle(cornerRadius: 25)
                            .foregroundStyle(.blue)
                    )
                    .matchedGeometryEffect(id: "title", in: namespace)
                    .transition(.scale(scale: 1)) // Stops a fading out bug

                    .frame(width: 120)
                
                    .onAppear {
                        withAnimation {
                            font = 15
                        }
                    }
                
            } 
            else {
                Text("Some Text")

                    .font(.system(size: font))

                    .padding()
                    .background(
                        RoundedRectangle(cornerRadius: 25)
                            .foregroundStyle(.blue))

                    .matchedGeometryEffect(id: "title", in: namespace)
                                
                    .transition(.scale(scale: 1)) // Stops a fading out bug

                    .offset(x: 50, y: 200)
                    .frame(width: 120)

                    .onAppear {
                        withAnimation {
                            font = 20
                        }
                    }
            }
        }
    }
}

#Preview {
    SwiftUIView()
}

Проблема не возникает, если я не использую (не переключаю представления) или не изменяю размер текста во время перехода. Я попробовал этот подход, используя анимируемый модификатор, который отлично анимирует, но реорганизация текста (если количество текстовых строк изменяется) не анимируется во время перехода, и возникает проблема, если анимация переворачивается до завершения.

Есть ли способ добиться желаемого эффекта с помощью, где анимация текста сочетается с анимацией кадра? Любые указания или подсказки высоко ценятся.

UPD , когда я тестирую на физическом устройстве (iPhone XS Max) и нажимаю «Переместить»,увеличивает шрифт и даже не перемещается на новое место до завершения анимации, тогда как синий прямоугольник перемещается. Обратная анимация (после повторного нажатия кнопки) работает нормально:

0 ответов

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