У меня есть UISlider
в повторно используемой ячейке табличного представления.
Как только значение изменяется, вызывается пользовательский метод valueChanged()
, который запускает метод табличного представления reloadData()
. reloadData()
вызывает cellForRowAtIndexPath
, и как только ячейка, в которой был изменен ползунок, загружается, он анимирует два ограничения, которые должны выглядеть так, как будто кнопка скользит справа от ячейки.
По сути, эффект, который я пытаюсь создать, заключается в том, что как только пользователь начинает двигать UISlider
, начинается анимация и появляется кнопка.
Но вот в чем загвоздка: свойство isContinious
UISlider
установлено на true
, чтобы убедиться, что анимация происходит. сразу и не задерживается до тех пор, пока пользователь не уберет палец с ползунка. Однако установка isContinious
на true
приводит к тому, что reloadData()
(который был внутри моего пользовательского valueChanged()
) вызывается МНОГО РАЗ с каждым маленьким слайдом, который фиксирует пользователь.
После некоторых исследований и опробования многих Тактика отладки, теперь я знаю, что как только вызывается reloadData()
, любые запущенные анимации (которые все еще анимируются во время вызова reloadData()
) прерываются и просто переходят в состояние, в котором они должны быть после завершения анимации.
Итак, резюмируя сценарий:
1) ползунок перемещается,
2) valueChanged()
запускает reloadData()
,
3) анимация начинает обновлять макет,
4) reloadData()
немедленно вызывается снова, разрушая анимацию, начатую на шаге 3.
Все происходит так быстро, когда isContinious
установлено в true
, поэтому анимация не успевает завершиться до того, как reloadData()
будет вызвана снова. Это разрушает анимацию и создает впечатление, что кнопка просто появляется на экране без анимации, хотя я знаю, что UIView.animate(withDuration:)
вызывается и нормально выполняет свою работу. Мне было интересно, есть ли способ обновить таблицу без вызова reloadData()
, так что в основном это альтернатива этому методу (я уже пробовал reloadCellAtIndexPath
, и это дает точно такой же эффект). Если нет, есть ли способ абсолютно убедиться, что анимация завершается без прерывания каким-либо другим методом обновления макета?