Почему моя анимация выпадения списка не работает в Swift

#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. Вы используете автоматическую компоновку или фрейм?