Разработка источника данных и делегата

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

Объект делегата является дополнительным (но рекомендуемый) объект, управляющий аспектами, связанными с представлением и взаимодействием с Вашим содержанием. Несмотря на то, что основное задание делегата должно управлять выделением ячейки и выбором, это может быть расширено для предоставления дополнительной информации. Например, перетекающий макет расширяет основное поведение делегата настроить метрики расположения, такие как размер ячеек и интервала между ними.

Источник данных управляет Вашим содержанием

Объект источника данных является объектом, ответственным за управление содержанием, Вы представляете использование представления набора. Объект источника данных должен соответствовать UICollectionViewDataSource протокол, определяющий основное поведение и методы, которые необходимо поддерживать. Задание источника данных должно предоставить представлению набора ответы на следующие вопросы:

Разделы и элементы являются фундаментальным принципом организации для содержания представления набора. Представление набора обычно имеет по крайней мере один раздел и может содержать больше. Каждый раздел, в свою очередь, содержит нуль или больше элементов. Элементы представляют основное содержание, которое Вы хотите представить, тогда как разделы организуют те элементы в логические группы. Например, фото приложение могло бы использовать разделы для представления единственного альбома фотографий или ряда фотографий, сделанных в тот же день.

Представление набора относится к данным, это содержит использование NSIndexPath объекты. При попытке определить местоположение элемента, представление набора использует индексную информацию пути, предоставленную ему объектом расположения. Для элементов индексный путь содержит число раздела и номер изделия. Для дополнительного и представлений художественного оформления, индексный путь содержит, какой бы ни значения были предоставлены объектом расположения. Значение индексных путей, присоединенных к дополнительному и представлениям художественного оформления, зависит от Вашего приложения, хотя первый индекс соответствует определенному разделу в источнике данных. Индексные пути этих представлений больше об идентификации, чем значение, идентифицируя, какое представление, какого вида в настоящее время рассматривается. Так, если, например, у Вас есть дополнительные представления, создающие заголовки и нижние колонтитулы для Ваших разделов, как замечено в перетекающем макете, релевантная информация, предоставленная индексным путем, является разделом, на который ссылаются.

Независимо от того, как Вы располагаете разделы и элементы в Вашем объекте данных, визуальное представление тех разделов и элементов все еще определяется объектом расположения. Различные объекты расположения могли представить раздел и данные элемента очень по-другому, как показано на рисунке 2-1. В этом числе объект перетекающего макета располагает разделы вертикально с каждым последовательным разделом ниже предыдущего. Пользовательский макет мог расположить разделы в нелинейное расположение, демонстрируя снова разделение расположения от фактических данных.

  Разделы рисунка 2-1 располагаются согласно расположению объектов расположения

Разработка Ваших объектов данных

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

Одно простое решение (но конечно не единственное решение) для Вашего источника данных для использования ряда вложенных массивов, как показано на рисунке 2-2. В этой конфигурации массив верхнего уровня содержит один или несколько массивов, представляющих разделы Вашего источника данных. Каждый массив раздела тогда содержит элементы данных для того раздела. Нахождение элемента в разделе является вопросом получения его массива раздела и затем получения элемента от того массива. Этот тип расположения упрощает управлять умеренно измеренными наборами элементов и получать отдельные элементы по требованию.

Рисунок 2-2  Располагая объекты данных с помощью вложенных массивов

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

Сообщение представления набора о содержании

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

  • Впервые выведено на экран представление набора.

  • Вы присваиваете различный объект источника данных представлению набора.

  • Вы явно вызываете представление набора reloadData метод.

  • Делегат представления набора выполняет блочное использование performBatchUpdates:completion: или любое перемещение, вставьте или удалите методы.

Вы обеспечиваете число разделов с помощью numberOfSectionsInCollectionView: метод и число элементов в каждом разделе с помощью collectionView:numberOfItemsInSection: метод. Необходимо реализовать collectionView:numberOfItemsInSection: метод, но если Ваше представление набора имеет только один раздел, реализовывая numberOfSectionsInCollectionView: метод является дополнительным. Оба метода возвращают целочисленные значения с надлежащей информацией.

При реализации источника данных как показано на рисунке 2-2 реализация методов источника данных могла бы быть столь же простой как показанные в Перечислении 2-1. В этом коде, _data переменная является переменной пользовательского элемента источника данных, хранящего массив верхнего уровня разделов. Получение количества того массива приводит к числу разделов. Получение количества одного из подмассивов приводит к числу элементов в разделе. (Конечно, Ваш собственный код должен сделать, любая проверка ошибок необходима, чтобы гарантировать, что значения возвратились, допустимы.)

Перечисление 2-1  , Обеспечивающее раздел и количества элемента

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView {
    // _data is a class member variable that contains one array per section.
    return [_data count];
}
 
- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section {
    NSArray* sectionArray = [_data objectAtIndex:section];
    return [sectionArray count];
}

Конфигурирование ячеек и дополнительных представлений

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

После того, как Ваш источник данных сообщает, сколько разделов и элементов он управляет, представление набора спрашивает объект расположения обеспечить атрибуты макета для содержания представления набора. В некоторый момент представление набора спрашивает объект расположения обеспечить список элементов в определенном прямоугольнике (часто, это - видимый прямоугольник). Использование представления набора, перечисляющее для выяснения у источника данных соответствующие ячейки и дополнительные представления. Для обеспечения тех ячеек и дополнительных представлений код должен сделать следующее:

  1. Встройте свои шаблонные ячейки и представления в Вашем файле раскадровки. (Также зарегистрируйте класс или файл пера для каждого типа поддерживаемой ячейки или представления.)

  2. В Вашем источнике данных исключите из очереди и сконфигурируйте надлежащую ячейку или представление, когда спросили.

Чтобы гарантировать, что ячейки и дополнительные представления используются самым эффективным возможным способом, представление набора принимает на себя ответственность создания тех объектов для Вас. Каждое представление набора поддерживает внутренние очереди в настоящее время неиспользованных ячеек и дополнительных представлений. Вместо того, чтобы создать объекты самостоятельно, просто попросите, чтобы представление набора предоставило Вам представление, которое Вы хотите. Если Вы ожидаете на очереди повторного использования, представление набора подготавливает ее и возвращает ее Вам быстро. Если Вы не ожидаете, представление набора использует зарегистрированный класс или файл пера, чтобы создать новый и возвратить его Вам. Таким образом, каждый раз, когда Вы исключаете из очереди ячейку или представление, Вы всегда получаете готовый к использованию объект.

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

Регистрация ячеек и дополнительных представлений

Можно сконфигурировать ячейки и представления представления набора программно или в файле раскадровки приложения.

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

  • Для ячеек перетащите Ячейку Представления Набора от библиотеки объектов и отбросьте ее на своем представлении набора. Установите пользовательский класс и набор допускающий повторное использование идентификатор представления Вашей ячейки к надлежащим значениям.

  • Для дополнительных представлений перетащите Набор Допускающее повторное использование Представление от библиотеки объектов и отбросьте его на своем представлении набора. Установите пользовательский класс и набор допускающий повторное использование идентификатор представления Вашего представления к надлежащим значениям.

Сконфигурируйте ячейки программно. Используйте любого registerClass:forCellWithReuseIdentifier: или registerNib:forCellWithReuseIdentifier: метод для соединения ячейки с идентификатором повторного использования. Вы могли бы вызвать эти методы как часть родительского процесса инициализации контроллера представления.

Сконфигурируйте дополнительные представления программно. Используйте любого registerClass:forSupplementaryViewOfKind:withReuseIdentifier: или registerNib:forSupplementaryViewOfKind:withReuseIdentifier: метод для соединения каждого вида представления с идентификатором повторного использования. Вы могли бы вызвать эти методы как часть родительского процесса инициализации контроллера представления.

Несмотря на то, что Вы регистрируете ячейки с помощью только идентификатора повторного использования, дополнительные представления требуют, чтобы Вы указали дополнительный идентификатор, известный как добрая строка. Каждый объект расположения ответственен за определение видов дополнительных представлений, которые это поддерживает. Например, UICollectionViewFlowLayout класс поддерживает два вида дополнительных представлений: представление заголовка раздела и представление нижнего колонтитула раздела. Для идентификации этих двух типов представлений это определяет строковые константы UICollectionElementKindSectionHeader и UICollectionElementKindSectionFooter. Во время расположения объект расположения включает добрую строку с другими атрибутами макета для того типа представления. Представление набора тогда передает информацию Вашему источнику данных. Ваш источник данных тогда использует и добрую строку и идентификатор повторного использования для решения, какому представлению возражают, чтобы исключить из очереди и возвратиться.

Регистрация является разовым событием, которое должно иметь место, прежде чем Вы попытаетесь исключить из очереди любые ячейки или представления. После регистрации можно исключить из очереди как много ячеек или представлений по мере необходимости, не повторно регистрируя их. Не рекомендуется изменить информацию о регистрации после исключения из очереди один или несколько элементов. Лучше зарегистрировать Ваши ячейки и представления один раз и быть сделанным с ним.

Исключение из очереди и ячейки конфигурирования и представления

Ваш объект источника данных ответственен за обеспечение ячеек и дополнительных представлений, когда спросили относительно них представлением набора. UICollectionViewDataSource протокол содержит два метода с этой целью: collectionView:cellForItemAtIndexPath: и collectionView:viewForSupplementaryElementOfKind:atIndexPath:. Поскольку ячейки являются требуемым элементом представления набора, Ваш источник данных должен реализовать collectionView:cellForItemAtIndexPath: метод, но collectionView:viewForSupplementaryElementOfKind:atIndexPath: метод является дополнительным и зависит от типа расположения в использовании. В обоих случаях Ваша реализация этих методов следует за очень простым образцом:

  1. Исключите из очереди ячейку или представление надлежащего типа с помощью dequeueReusableCellWithReuseIdentifier:forIndexPath: или dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: метод.

  2. Сконфигурируйте представление с помощью данных в указанном индексном пути.

  3. Возвратите представление.

Процесс исключения из очереди разработан для освобождения Вас от ответственности необходимости создать ячейку или просмотреть себя. Пока Вы зарегистрировали ячейку или представление ранее, методы двухсторонней очереди, как гарантируют, никогда не возвратятся nil. Если нет никакой ячейки или представления данного типа на очереди повторного использования, метод двухсторонней очереди просто создает тот с помощью раскадровки или с помощью класса или файла пера, который Вы зарегистрировали.

Ячейка, возвращенная Вам от процесса исключения из очереди, должна быть в нетронутом состоянии и готова быть сконфигурированной с новыми данными. Для ячейки или представления, которое должно быть создано, процесс исключения из очереди создает и инициализирует его с помощью нормальных процессов — т.е. путем загрузки представления из раскадровки или файла пера или путем создания нового экземпляра и инициализации его с помощью initWithFrame: метод. Напротив, элемент, не создававшийся с нуля, но это было вместо этого получено от очереди повторного использования, может уже содержать данные от предыдущего использования. В этом случае методы двухсторонней очереди вызывают prepareForReuse метод элемента, чтобы дать ему шанс возвратить себя нетронутому состоянию. Когда Вы реализуете пользовательскую ячейку или просматриваете класс, можно переопределить этот метод, чтобы сбросить свойства к значениям по умолчанию и выполнить любую дополнительную очистку.

После того, как Ваш источник данных исключает представление из очереди, он конфигурирует представление со своими новыми данными. Можно использовать индексный путь, переданный методам источника данных, чтобы определить местоположение надлежащего объекта данных и затем применить данные того объекта к представлению. После конфигурирования представления возвратите его из метода, и Вы сделаны. Перечисление 2-2 показывает простой пример того, как сконфигурировать ячейку. После исключения из очереди ячейка метод устанавливает пользовательскую метку ячейки с помощью информации о расположении ячейки и затем возвращает ячейку.

Перечисление 2-2  , Конфигурирующее пользовательскую ячейку

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath {
   MyCustomCell* newCell = [self.collectionView dequeueReusableCellWithReuseIdentifier:MyCellID
                                                                          forIndexPath:indexPath];
 
   newCell.cellLabel.text = [NSString stringWithFormat:@"Section:%d, Item:%d", indexPath.section, indexPath.item];
   return newCell;
}

Вставка, удаляя и перемещая разделы и элементы

Для вставки удалите, или переместите единственный раздел или элемент, выполните эти шаги:

  1. Обновите данные в своем объекте источника данных.

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

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

Когда Вы добавляете, удаляете или перемещаете единственный элемент программно, методы представления набора автоматически создают анимации для отражения изменений. Если Вы хотите анимировать многократные изменения вместе, тем не менее, необходимо выполнить всех, вставляют, удаляют, или вызовы перемещения в блоке и передаче тот блок к performBatchUpdates:completion: метод. Процесс пакетного обновления тогда анимирует все Ваши изменения одновременно, и можно свободно смешать вызовы, чтобы вставить, удалить, или переместить элементы в том же блоке.

Перечисление 2-3 показывает простой пример того, как выполнить пакетное обновление для удаления в настоящее время выбранные пункты. Блок передал performBatchUpdates:completion: метод сначала вызывает пользовательский метод обновить источник данных. Это тогда говорит представлению набора удалять элементы. И блок обновления и блок завершения, который Вы обеспечиваете, выполняются синхронно.

Перечисление 2-3  Удаляя выбранные пункты

[self.collectionView performBatchUpdates:^{
   NSArray* itemPaths = [self.collectionView indexPathsForSelectedItems];
 
   // Delete the items from the data source.
   [self deleteItemsFromDataSourceAtIndexPaths:itemPaths];
 
   // Now delete the items from the collection view.
   [self.collectionView deleteItemsAtIndexPaths:tempArray];
} completion:nil];

Управление визуальным состоянием для выборов и выделений

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

Перечисление 2-4 показывает код, который мог быть включен в Вашу реализацию пользовательской ячейки представления набора для упрощения изменяющегося появления для выделенных и выбранных состояний. Ячейка backgroundView свойство всегда будет представлением по умолчанию, когда ячейка загрузится впервые и когда ячейка или не выделена или не выбрана. selectedBackgroundView свойство заменяет фоновое представление по умолчанию каждый раз, когда ячейка выделена или выбрана. В этом случае цвет фона ячейки был бы изменен от красного до белого, когда выбрано или выделено.

Перечисление 2-4  , Устанавливающее фон, просматривает для указания измененных состояний

UIView* backgroundView = [[UIView alloc] initWithFrame:self.bounds];
backgroundView.backgroundColor = [UIColor redColor];
self.backgroundView = backgroundView;
 
UIView* selectedBGView = [[UIView alloc] initWithFrame:self.bounds];
selectedBGView.backgroundColor = [UIColor whiteColor];
self.selectedBackgroundView = selectedBGView;

Делегат представления набора предоставляет представлению набора следующие методы для упрощения выделения и выбора:

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

Например, если Вы предпочитаете рисовать состояние выбора ячейки сами, можно уехать selectedBackgroundView набор свойств к nil и примените любые визуальные изменения в ячейке с помощью объекта делегата. Вы применили бы визуальные изменения в collectionView:didSelectItemAtIndexPath:: метод и удаляет их в collectionView:didDeselectItemAtIndexPath: метод.

Если Вы предпочитаете рисовать выделение, утверждают себя, можно переопределить collectionView:didHighlightItemAtIndexPath: и collectionView:didUnhighlightItemAtIndexPath: методы делегата и используют их для применения выделений. Если Вы также указали представление в selectedBackgroundView свойство, необходимо внести изменения в представление содержания ячейки, чтобы гарантировать, что изменения видимы. Перечисление 2-5 показывает простой способ изменить выделение с помощью цвета фона представления содержания.

Перечисление 2-5  , Применяющее временное выделение к ячейке

- (void)collectionView:(UICollectionView *)colView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell* cell = [colView cellForItemAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor blueColor];
}
 
- (void)collectionView:(UICollectionView *)colView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell* cell = [colView cellForItemAtIndexPath:indexPath];
    cell.contentView.backgroundColor = nil;
}

Существует тонкое, но важное различие между выделенным состоянием ячейки и его выбранным состоянием. Выделенное состояние является переходным состоянием, которое можно использовать для применения видимых выделений к ячейке, в то время как палец пользователя все еще касается устройства. Это состояние установлено в YES только, в то время как представление набора отслеживает сенсорные события по ячейке. Когда сенсорные события останавливаются, выделенное состояние возвращается к значению NO. В отличие от этого, выбранные изменения состояния только после серии сенсорных событий закончились — в частности, когда те сенсорные события указали, что пользователь попытался выбрать ячейку.

Рисунок 2-3 иллюстрирует серию шагов, происходящую, когда пользователь касается отменявшей ячейки. Начальное событие приземления заставляет представление набора изменять выделенное состояние ячейки к YES, несмотря на то, что выполнение так автоматически не изменяет появление ячейки. Если последний штрих событие имеет место в ячейке, выделенное состояние возвращается к NO и представление набора изменяет выбранное состояние на YES. Когда пользователь изменяет выбранное состояние, представление набора выводит на экран представление в ячейке selectedBackgroundView свойство, но это - единственное визуальное изменение, которое представление набора вносит в ячейку. Любые другие визуальные изменения должны быть внесены Вашим объектом делегата.

  Отслеживание рисунка 2-3 затрагивает в ячейке

Выбирает ли пользователь или отменяет выбор ячейки, выбранное состояние ячейки всегда является последней вещью измениться. Касания в ячейке всегда приводят к изменениям в выделенном состоянии ячейки сначала. Только после того, как концы последовательности касания и любые выделения, примененные во время той последовательности, удалены, делает выбранное состояние изменения ячеек. При разработке ячеек необходимо удостовериться, что визуальное появление выделений и выбранного состояния не конфликтует непреднамеренными способами.

Показ меню редактирования для ячейки

Когда пользователь выполняет жест длинного касания на ячейке, представление набора пытается вывести на экран меню Edit для той ячейки. Меню Edit может использоваться, чтобы сократить, скопировать, и вставить ячейки в представлении набора. Нескольким условиям нужно удовлетворить, прежде чем меню Edit может быть выведено на экран:

Если этим условиям удовлетворяют, и пользователь выбирает действие из меню, представление набора вызывает делегата collectionView:performAction:forItemAtIndexPath:withSender: метод для выполнения действия с обозначенным элементом.

Перечисление 2-6 показывает, как препятствовать тому, чтобы появился один из пунктов меню. В этом примере, collectionView:canPerformAction:forItemAtIndexPath:withSender: метод препятствует тому, чтобы пункт меню Cut появился в меню Edit. Это включает элементы Копии и Вставки так, чтобы пользователь мог вставить содержание.

Перечисление 2-6  , Выборочно запрещающее действия в меню Edit

- (BOOL)collectionView:(UICollectionView *)collectionView
        canPerformAction:(SEL)action
        forItemAtIndexPath:(NSIndexPath *)indexPath
        withSender:(id)sender {
   // Support only copying and pasting of cells.
   if ([NSStringFromSelector(action) isEqualToString:@"copy:"]
      || [NSStringFromSelector(action) isEqualToString:@"paste:"])
      return YES;
 
   // Prevent all other actions.
   return NO;
}

Для получения дополнительной информации о работе с командами области монтажа см. текстовое Руководство по программированию для iOS.

Переход между разметками

Самый простой способ перейти между разметками при помощи setCollectionViewLayout:animated: метод. Однако, если Вы требуете управления перехода или хотите, чтобы он был интерактивным, используйте a UICollectionViewTransitionLayout объект.

UICollectionViewTransitionLayout класс является специальным типом расположения, установленного как объект расположения представления набора при переходе к новому расположению. С объектом расположения перехода у Вас могут быть объекты, следуют за не линейным контуром, используют различный алгоритм синхронизации или перемещаются согласно входящим сенсорным событиям. Стандартный класс обеспечивает линейный переход к новому расположению, но как UICollectionViewLayout класс, UICollectionViewTransitionLayout класс может быть разделен на подклассы для создания любого желаемого эффекта. При этом необходимо реализовать те же методы, Вы были бы при создании пользовательского макета, и позвольте реализации адаптироваться для ввода от пользователя, чаще всего от устройства распознавания жеста. Для получения дополнительной информации о создании объектов пользовательского макета, посмотрите Пользовательские макеты Создания.

UICollectionViewLayout класс обеспечивает несколько методов для отслеживания перехода между разметками. UICollectionViewTransitionLayout объекты отслеживают завершение перехода через transitionProgress свойство. Поскольку переход происходит, Ваш код обновляет это свойство периодически для указания процента завершения перехода. Например, использование UICollectionViewTransitionLayout класс в сочетании с объектами как устройства распознавания жеста, которые можно использовать для перехода между разметками, позволяет Вам создавать интерактивные переходы. Также, если Вы реализуете пользовательский объект расположения перехода, UICollectionViewTransitionLayout класс обеспечивает два метода для отслеживания значений, относящихся к Вашему расположению: updateValue:forAnimatedKey: и valueForAnimatedKey: методы. Эти методы отслеживают специальные значения с плавающей точкой, которые можно установить и изменить во время перехода для передачи с важной информацией расположения. Например, если бы Вы перешли между разметками с помощью жеста повышения, то Вы могли бы использовать эти методы для сообщения объекта расположения перехода в том, что смещает потребность представления быть от друг друга.

Шаги для включения a UICollectionViewTransitionLayout объект в Вашем приложении следующие:

  1. Создайте экземпляр стандартного класса или Вашего собственного класса с помощью initWithCurrentLayout:nextLayout: метод.

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

  3. Реализуйте collectionView:transitionLayoutForOldLayout:newLayout: метод в Вашем делегате представления набора и возвращает Ваш объект расположения перехода.

  4. Дополнительно измените значения для своего расположения с помощью updateValue:forAnimatedKey: метод для указания измененных значений, относящихся к объекту расположения. Стабильное значение в этом случае 0.