Как оживить ретрансляцию NSCollectionViewLayout на изменение границ?

У меня есть базовая реализация NSCollectionViewLayout очень похоже на NSCollectionViewFlowLayout:

Помещает элемент в горизонтальный ряд. Если места недостаточно, следующий элемент добавляется в следующий ряд и так далее.

Мой вопрос: как я могу анимировать изменение макета, когда элемент перемещается из первого ряда во второй ряд?

Вот пример:

Relayout

Обратите внимание, как элемент № 3 "перепрыгивает" с первого на второй ряд. Я хотел бы оживить это изменение.

Существует множество способов анимировать добавление / удаление элементов, но я не смог выяснить, как анимировать изменения макета, когда элементы не меняются.

1 ответ

Методы, которые вы хотите переопределить в подклассе макета, - метод prepare(forAnimatedBoundsChange:) и finalizeAnimatedBoundsChange ().

Из документации:

open func prepare(forAnimatedBoundsChange oldBounds: NSRect) // NSCollectionView calls this when its bounds have changed inside an animation block before displaying items in its new bounds

Подготавливает объект макета для анимированных изменений границ представления коллекции или для вставки или удаления элементов.

open func finalizeAnimatedBoundsChange() // also called inside the animation block

Очищается после любых анимированных изменений границ представления коллекции или после вставки или удаления элементов.

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