Для приложения, над которым я работаю, требуется макет, очень похожий на макет приложения «Фото» на 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
}
}