Я пытаюсь добиться того же поведения, что и в приложении «Фотографии», когда одно изображение открыто в полноэкранном режиме; т. е. я хочу иметь возможность прокручивать разные изображения, а также масштабировать любое из них. Как и в приложении «Фотографии», после увеличения определенного изображения я хотел бы иметь возможность прокручивать различные изображения в моей галерее.
Моя ситуация выглядит следующим образом: у меня есть UICollectionView
, пользовательский UICollectionViewFlowLayout
, где для itemSize задан размер экрана, и пользовательский UICollectionViewCell
с UIImageView
. Это прекрасно работает при прокрутке разных фотографий, проблема заключается в их прокрутке.
Первый подход, который я попробовал, описан в сеансе WWDC 2012: "Расширенная коллекция Представления и создание пользовательских макетов». Эффект, который можно получить при таком подходе, заключается в том, что ячейка масштабируется должным образом, но затем она будет перекрываться соседними ячейками, создавая нежелательный эффект.
Второй подход аналогичен предложенному в сессии WWDC 2010: "Разработка приложений с использованием прокрутки". Взгляды'. Однако я не совсем уверен, что этот подход будет работать с UICollectionView вместо UIScrollView + subviews. Я устанавливаю свой контроллер представления как UIScrollViewDelegate
и переопределяю viewForZoomingInScrollView:
, где я возвращаю UIImageView видимой ячейки в данной точке. Ничего не произойдет, если я это сделаю. Я также попытался вернуть ячейку, и в этом случае весь макет UICollectionView испорчен. Я взглянул на пример проекта, который создала Apple (PhotoScroller), который успешно реализует то, что я хочу, но там у них просто есть UIImageView
в качестве подвида UIScrollView
.
Я думаю, что для того, чтобы реализовать поведение приложения «Фотографии» с помощью UICollectionView
, мне нужно сделать это, выбрав первый подход и изменив атрибуты макета других ячеек в моем представлении коллекции, а не только увеличенного.
Для меня это звучит как решение довольно низкого уровня, и мне было интересно, знает ли кто-нибудь о лучшем подходе к этой проблеме.