#swift #animation
#swift #Анимация
Вопрос:
У меня есть функция в моем подклассе view controller ниже, которая должна анимировать выпадение списка в течение 2,5 секунд в качестве теста, но он немедленно удаляет список
private func animateList() {
if listDropped == false {
UIView.animate(withDuration: 2.5, delay: 0.0, options: .curveEaseInOut) {
self.tableView.isHidden = false
self.listDropped = true
} completion: { (finish) in
print("DEBUG: list drop animation complete")
}
}
else {
UIView.animate(withDuration: 2.5, delay: 0.0, options: .curveEaseInOut) {
self.tableView.isHidden = true
self.listDropped = false
} completion: { (finish) in
print("DEBUG: list raise animation complete")
}
}
}
Я пробовал читать документацию, но я уверен, что правильно реализую метод animate. Я просто не понимаю, почему он не анимирует список вверх и вниз каждый раз, когда я нажимаю кнопку drop / raise list.
Комментарии:
1. Можете ли вы показать объявление свойства
listDropped
?2.
private var listDropped = false
Ответ №1:
Для отображения анимации вверх и вниз с анимацией UIView. Вы должны обновить высоту TableView вместо их видимости.
Пожалуйста, найдите пример кода ниже:
private func animateList() {
if listDropped == false {
UIView.animate(withDuration: 2.5, delay: 0.0, options: .curveEaseInOut) {
var rect = self.tableView.frame
rect.size.height = 120(or any value)
self.tableView.frame = rect
self.listDropped = true
} completion: { (finish) in
self.tableView.isHidden = false
print("DEBUG: list drop animation complete")
}
}
else {
UIView.animate(withDuration: 2.5, delay: 0.0, options: .curveEaseInOut) {
var rect = self.tableView.frame
rect.size.height = 0(or any value)
self.tableView.frame = rect
self.listDropped = false
} completion: { (finish) in
self.tableView.isHidden = true
print("DEBUG: list raise animation complete")
}
}
}
Комментарии:
1. Я попробовал ваше предложение, но выпадающий список вообще не отображается
2. Теперь список отображается с изменением высоты таблицы, но теперь он делает что-то действительно странное. Я нажимаю на кнопку, чтобы удалить список, и список появляется мгновенно, не более 2,5 секунд. Затем я нажимаю еще раз, чтобы закрыть список, и таблица мгновенно удлиняется на величину, равную ее той же высоте, затем медленно закрывается до первоначальной высоты, а затем мгновенно закрывается. Надеюсь, вы понимаете, что я говорю.
3. Вместо использования [.curveEaseIn, .curveEaseOut, пожалуйста, используйте [.curveEaseIn, .curveEaseOut] .
4. спасибо, я это сделал, но он по-прежнему анимируется неправильно, это не имело никакого значения.
5. Вы используете автоматическую компоновку или фрейм?