Я создал пользовательский вид. добавлены ограничения ширины, высоты и centerY.
Я использовал его в раскадровке.
Я хочу добавить метку, увеличить ширину анимации. и через 1,5 секунды мне нужно убрать метку и анимированно уменьшить ширину.
Я написал приведенный ниже код в моем собственном представлении.
fileprivate func unfoldMeAnimatedly() {
self.labelLeadingToStatusImageView.isActive = true
self.updateStatusLabel()
self.layoutIfNeeded()
self.constraints.forEach { (constraint) in
if constraint.identifier == "widthOfCardDraftStatus" {
constraint.constant = 95
}
}
UIView.animate(withDuration: 0.6, delay: 0.0, options: UIView.AnimationOptions.curveLinear, animations: {
self.layoutIfNeeded()
}) { (finished) in
}
}
fileprivate func foldMeAnimatedly() {
self.constraints.forEach { (constraint) in
if constraint.identifier == "widthOfCardDraftStatus" {
constraint.constant = 24
}
}
UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveLinear, animations: {
//self.statusLabel.alpha = 0.0
self.layoutIfNeeded()
}) { (finished) in
}
}
, вызывая анимации
unfoldMeAnimatedly()
DispatchQueue.main.asyncAfter(deadline: .now()+1.5) {
self.foldMeAnimatedly()
}
Привет результата:
Я не понял, почему он движется. желаемая ширина должна быть увеличена / уменьшена только на одном конце. т.е. правая сторона.
Несколько наблюдений: странно, что я изменил продолжительность анимации на 0,5, 0,5 и время ожидания на 0,5. теперь он работает как положено.
Почему так? Кто-нибудь может объяснить, почему он так себя ведет или какая-то проблема с кодом?