Сжать жест, чтобы расширить ячейку UICollectionView - PullRequest
0 голосов
/ 17 января 2019

Для приложения, над которым я работаю, требуется макет, очень похожий на макет приложения «Фото» на iPad. Есть сетка UIView с, и пользователь должен иметь возможность сжимать в один, и по мере того, как они сжимаются, наблюдайте, как этот вид увеличивается в размере, пока не станет полноэкранным.

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

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

Я думал, что решение может заключаться в том, что когда контроллер представления коллекции распознает жест сжатия, он может скрыть зажатую ячейку. Затем создайте новую UIView, которая является копией ячейки представления коллекции, с границами, эквивалентными месту расположения ячейки. Затем этот вид может быть тем, который можно сжимать, поворачивать и панорамировать. Как только пользователь заканчивает жест, представление просто оживляет обратно в исходное положение ячейки, а затем устанавливается на nil.

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

Код фрагмента моей текущей реализации масштабирования ячейки показан ниже. Это та, которая создает проблему скрытия ячейки под более поздними ячейками при ее расширении.

 @objc func scalePiece(_ gestureRecognizer : UIPinchGestureRecognizer) {
    guard gestureRecognizer.view != nil else { return 

    if gestureRecognizer.state == .began || 
       gestureRecognizer.state == .changed {

        gestureRecognizer.view?.transform = (gestureRecognizer.view?.transform.scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale))!

        gestureRecognizer.scale = 1.0

    }
}

1 Ответ

0 голосов
/ 17 января 2019

Одна из самых простых возможностей исправить ячейку, находящуюся позади других, - это вызвать bringSubviewToFront(_:) в представлении коллекции, минуя ячейку.

Предостережение однако я не уверен, что это оптимальный : так как вы на самом деле не владеете ячейками / иерархией представления коллекции, вообще говоря, вы не должны касаться подвиды прямо так.

Схожая возможность - не такая простая, но, вероятно, гораздо более надежная и, следовательно, предпочтительная, - это настроить макет . Поскольку объект UICollectionViewLayout представления коллекции может указывать zIndex конкретной ячейки , вы можете перезагрузить ячейку, когда начинается жест повышения, и обновить индекс Z только для этой ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...