Как управлять ограничениями подвижных видов в iOS?

У меня есть набор кнопок, которые я анимирую в режиме "развернуть-свернуть", больше похоже на действие открытия и закрытия ящика. Я просто изменяю положение X этих кнопок для достижения этой цели, и она отлично работает. При разработке этого макета в конструкторе интерфейсов я установил ограничения для всех этих кнопок в их "закрытом ящике".

Проблема возникает, когда ящик остается открытым, а некоторые другие виды на экране обновляются. Я это понимаю viewDidLayoutSubviews() вызывается в этом случае. Из-за этого меню ящика, которое оставлено открытым, неожиданно закрывается, что мешает анимации "закрыть ящик", и кнопки не получают ожидаемый вид, как в их состоянии "ящик закрыт".

Я предполагаю, что ограничения кнопок будут повторно инициализированы, когда viewDidLayoutSubviews() получил вызов.

Теперь перейдем к моему вопросу - как нам установить / управлять ограничениями для представлений, которые будут перемещаться во время выполнения из-за анимации?

Я новичок в разработке приложений для iOS, и я прошел через вопросы, задаваемые по программному управлению ограничениями или viewDidLayoutSubviews и т.д., но я не мог найти стандартный способ следовать в ситуации, с которой столкнулся.

1 ответ

Решение

Вместо изменения кадра вы можете анимировать изменение ограничений.

Краткий обзор того, как это сделать:

yourConstraint.constant = newValue

UIView.animate(withDuration: animationDuration) {
    yourView.layoutIfNeeded()
}

Более подробную информацию об этом можно найти здесь.

Другие вопросы по тегам