Мне нужно скрыть поле, когда пользователь выбирает опцию из сегмента. Первое, что скрывается, поэтому я должен анимировать другие поля, чтобы покрыть пространство, созданное скрытым полем.Анимация в swift возвращается после некоторых действий
Я использую следующий код для этого, анимация работает как ожидается после скрытия ввода телефона. но когда я выбираю любое другое поле с одного и того же вида (электронная почта или любая кнопка или что-то еще), emailInput снова отображается в том же месте, где он был раньше. Эффекты анимации (место ввода) теряются.
@IBAction func hasPhoneChanged(sender: UISegmentedControl) {//is called when user selects that "he have phone or not"
if sender.selectedSegmentIndex == 0 {//Yes
self.phoneInput.hidden = false
...
}else{ //No
self.phoneInput.hidden = true
//move the next input up, to cover space
UIView.animateWithDuration(1, animations: {() -> Void in
self.emailInput.frame.origin.y = self.emailInput.frame.origin.y - 38;
})
}
}
Я делаю что-то неправильно? Любая подсказка, пожалуйста.
Вы правы, я использовал автомат. И в этом была проблема. Теперь он остается на анимированной позиции. Но теперь он не оживляет, он просто появляется прямо там, где я хочу, чтобы он появился. Это то, что я использую сейчас. UIView.animateWithDuration (1, анимация: {() -> Пустота в self.emailTopVSpaceConstraint.constant = self.emailTopVSpaceConstraint.constant - 38 }) " – Patriks
Вызов layoutIfNeeded в вашем блоке анимации, чтобы выполнить вычисления для позиции назначения. Отредактировал мой ответ. – Stefan
Правильный ответ! Для знания, что было бы более эффективным способом: 1) анимировать по свойству (высота/ширина), а в 'завершении: 'установить ограничение или 2) анимировать по ограничению, как вы показали выше. – Patriks