Я хочу анимировать два текстовых поля, второе с задержкой. Но не работает, задержки нет, анимируют одновременно из позиции 100 в 0.
Вот код:
@State private var offset: CGFloat = 100
@State private var offset2: CGFloat = 100
@State private var duration = 0.4
@State private var duration2 = 0.4
@State private var opacity = 0.0
@State private var opacity2 = 0.0
VStack(alignment: .leading) {
Text("select exercise")
.foregroundColor(.gray)
.font(.system(size: 36))
.fontWeight(.bold)
.opacity(opacity)
.offset(x: 0.0, y: offset)
.onAppear {
withAnimation(.easeInOut(duration: duration)) { self.offset = 0
self.opacity = 1
}
}
Text("00 reps")
.foregroundColor(.gray)
.font(.system(size: 36))
.fontWeight(.bold)
.opacity(opacity2)
.offset(x: 0.0, y: offset2)
.onAppear {
withAnimation(.easeInOut(duration: duration2)) { self.offset2 = 0
self.opacity2 = 1
}
}
}
}
Что мне не хватает?
Из предоставленного вами частичного кода кажется, что вы манипулируете одними и теми же переменными в обоих замыканиях. Измените это на отдельные для каждого поля.
Причина:
когда вы делаете:
@State private var changeVar = 0.0
withAnimation(...){
changeVar = 1.0
}
SwiftUI постепенно изменит это значение со значения, которое оно имеет в момент начала анимации, на значение, указанное в замыкании. Как только значение изменяется, представление перерисовывается с текущим значением changeVar
. Поскольку вы используете одну и ту же переменную для обоих представлений, изменения применяются к обоим одновременно. Следовательно, анимация начинается для обоих одновременно.
Я не знаю, это все еще не работает для меня. Я отредактировал вопрос с моими заявлениями. Это все то же самое. Очень запутанно для меня.
@Adrian В вашем отредактированном примере вы не вводили никаких задержек! Так что же, по вашему мнению, должно произойти ?? Например: здесь должно работать .easeInOut(duration: duration).delay(2)
.
Можете ли вы привести пример? Я пробовал, но у меня не работает. И почему не работает простая задержка? Просто любопытно