Увеличете мащаба на съдържанието на една клетка в UICollectionView

Опитвам се да постигна същото поведение като в приложението Снимки, когато едно изображение е отворено на цял екран; т.е. искам да мога да превъртам между различните си изображения и също така да щипна, за да увелича някое от тях. Както в приложението Снимки, след като увелича определено изображение, бих искал да мога да превъртам между различните изображения в моята галерия.

Ситуацията ми е следната: имам UICollectionView, персонализиран UICollectionViewFlowLayout, където itemSize е зададен да бъде размера на екрана, и персонализиран UICollectionViewCell, който има UIImageView. Това работи добре при превъртане през различните снимки, проблемът е при превъртането в тях.

Първият подход, който опитах, е този, изобразен в сесията на WWDC 2012: „Разширена колекция Изгледи и изграждане на персонализирани оформления. Ефектът, който се получава с този подход, е правилното мащабиране на клетката, но след това тя ще се припокрива с клетките до нея, създавайки нежелан ефект.

Вторият подход е като този, предложен в сесията на WWDC 2010: „Проектиране на приложения с превъртане Изгледи'. Въпреки това не съм напълно сигурен, че този подход ще работи с UICollectionView вместо UIScrollView + подизгледи. Задавам моя контролер за изглед като UIScrollViewDelegate и замествам viewForZoomingInScrollView:, където връщам UIImageView на видимата клетка в тази дадена точка. Нищо не се случва, ако го направя. Също така се опитах да върна клетката и в този случай цялото оформление на UICollectionView е объркано. Разгледах примерния проект, съставен от Apple (PhotoScroller), който успешно прилага това, което искам, но там те просто имат UIImageView като подизглед на UIScrollView.

Мисля, че за да внедря поведението на приложението Photos с UICollectionView, трябва да направя това, като използвам първия подход и променям атрибутите на оформлението на другите клетки в изгледа на моята колекция, а не само на тази, която е увеличена.

Това ми звучи като решение на доста ниско ниво и се чудех дали някой знае по-добър подход към този проблем.


person jjramos    schedule 09.07.2014    source източник


Отговори (1)


След още няколко дни проучване на това, измислих решение, при което трябваше да направя някои компромиси, но то е приемливо за моите изисквания.

Това, което в крайна сметка направих, е да имам UIScrollView като най-горния изглед на моя персонализиран UICollectionViewCell и да добавя UIImageView като подизглед на този UIScrollView. Първият проблем, който трябва да разреша, когато добавих, е, че UIScrollViews не работят добре с AutoLayout, както е обяснено тук. Така че, ако искате вашето изображение да бъде на цял екран както в портретна, така и в пейзажна ориентация, не забравяйте да използвате подходящите маски за автоматично преоразмеряване. Като направих това и върнах моя UIImageView във viewForZoomingInScrollView: получих ефекта на мащабиране, който търсех.

Компромисът, който трябваше да направя обаче, беше, че не позволявам на потребителя да превърта между различни изображения, ако има приложено увеличение (т.е. мащабът е различен от 1,0). Освен това работи добре.

person jjramos    schedule 16.07.2014
comment
Успяхте ли да преодолеете този проблем с увеличението? Имам изискване за събитие за превъртане на клетки, ако съдържанието е увеличено и все още не мога да намеря никакви решения, които да работят... - person pawel.kalisz; 17.11.2016