Подтвердить что ты не робот

UICollectionView для Springboard как папки

Я пытаюсь добиться следующего эффекта:

A UICollectionView отображает сетку ячеек для родительского типа объекта, e. г. фотоальбом. Когда я нажимаю один из этих элементов, я бы хотел прокрутить этот элемент в верхней части экрана и открыть из него папку Springboard. Внутри этой области папок должна быть показана другая коллекция, состоящая из элементов детали, т.е. е. отдельные фотографии этого альбома. Нажатие в оставшемся "родительском" представлении снова закрывает папку. См. Эту схему:

enter image description here

То, что я сделал до сих пор, - это регулярное представление коллекции для альбомов. Когда я выбираю один, он прокручивает выбранный элемент вверх, а затем использует JWFolders, чтобы открыть пустую папку в этом месте. Как только это будет показано, я вызываю окружающий UINavigationController, чтобы нажимать мой второй контроллер просмотра с деталями. Это выкладывается, так что он кажется пользователю, как если бы он был тем же самым видом.

Есть несколько проблем с этим подходом, и я хотел бы знать, как это сделать лучше:

  • JWFolders делает снимок экрана и анимирует две половины его вверх/вниз для достижения эффекта открытия. Это нормально, но довольно медленно на iPad3, потому что он перемещает много пикселей, и iPad3 GPU не совсем подходит для этой задачи.

  • Второе представление должно быть идеальным для пикселя, чтобы соответствовать первому. Вероятно, это случайно сломается.

  • Я ограничен относительно того, какие анимации возможны для перехода контроллера просмотра. По умолчанию UINavigationController нажатие справа не подходит. Я переоцениваю это, чтобы сделать кросс-растворение, но все же это далеко не идеально.

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

Update:

Я немного изменил подход. Теперь я использую контроллер контейнера, который имеет два встроенных контроллера просмотра коллекций. Один для "Альбом" и один для части "Фотографии" внизу. Используя UIImageView в середине между ними, я могу получить треугольник, направленный вверх. Это также хорошо с точки зрения обслуживания, поскольку упрощает техническое обслуживание, когда две коллекции обрабатываются полностью отдельно.

В приложении используется автоматический макет, поэтому я могу изменить объем пространства, в котором каждый из двух вложенных представлений принимает путем изменения ограничений. Это намного быстрее, чем подход, основанный на скриншоте, с JWFolders и прекрасно работает на iPad3.

Это почти меня, где я хочу быть. Единственное, что остается, это получить правильную анимацию открытия. Я хотел бы одновременно прокрутить коллекцию альбомов, чтобы постученный элемент переместился в верхнюю часть и расширил коллекцию фотографий с помощью треугольника, указывающего на ячейку альбома.

Можно ли каким-либо образом "подключить" нижний вид к этой ячейке с помощью ограничений макета, чтобы вызов scrollToItemAtIndexPath:atScrollPosition:animated: перетащил нижний вид?

4b9b3361

Ответ 1

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

Представление папки - это другой UICollectionView, который появляется в созданном промежутке. В главном представлении представлено одно или три вида в зависимости от того, открыт или закрыт ящик. Я бы, вероятно, посмотрел на создание контроллера вида с представлением коллекции и с помощью средства управления контроллером View для управления всеми тремя представлениями. У вас есть полный контроль над представлением этих представлений, поэтому вы можете одновременно анимировать верхний и нижний вид вверх и вниз, чтобы показать вид папки на месте, как это делает Springboard.

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

(Я стесняюсь ответить на это из-за большого количества upvotes пока нет ответов, поэтому я, возможно, что-то пропустил, но именно так я начал бы пытаться достичь эффекта Springboard.)

Ответ 2

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