Изменение строки одного Text не создаёт автоматически scale-переход между двумя представлениями. Для замены через transition нужна смена identity или условные ветви.
struct ExampleView: View {
Изменение строки одного Text не создаёт автоматически scale-переход между двумя представлениями. Для замены через transition нужна смена identity или условные ветви.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
struct ExampleView: View {
@State var isVariant1 = true
var body: some View {
VStack {
Toggle("Use Variant 1", isOn: $isVariant1.animation(.linear))
Text(isVariant1 ? "Variant 1" : "Variant 2")
}
.padding()
}
}
Variant1 -> scale -> 1 -> 0 Variant2 -> scale -> 0
Ответ
Изменение строки одного Text не создаёт автоматически scale-переход между двумя представлениями. Для замены через transition нужна смена identity или условные ветви.
Если требуется уменьшение старого текста и появление нового с масштабированием, можно задать разную identity:
struct ExampleView: View {
@State private var isVariant1 = true
var body: some View {
VStack {
Toggle("Use Variant 1", isOn: $isVariant1.animation(.linear))
ZStack {
Text(isVariant1 ? "Variant 1" : "Variant 2")
.id(isVariant1)
.transition(.scale)
}
}
.padding()
}
}
Нужен import SwiftUI. Это одновременные выход и вход, не два строго последовательных этапа. Для последовательного сценария требуется отдельное состояние фаз. В исходнике animation на binding задаёт транзакцию, но не придумывает scale-анимацию для произвольной смены текста.