Основы представления набора
Для представления его содержания на экране представление набора сотрудничает со многими различными объектами. Некоторые объекты являются пользовательскими и должны быть предоставленными Вашим приложением. Например, Ваше приложение должно обеспечить объект источника данных, говорящий представление набора, сколько там должны вывести на экран элементы. Другие объекты предоставлены UIKit и являются частью основного проекта представления набора.
Как таблицы, представления набора ориентированы на данные объекты, реализация которых включает сотрудничество с объектами Вашего приложения. Понимание, что необходимо сделать в коде, требует небольшой справочной информации о том, как представление набора делает то, что это делает.
Представлением набора является сотрудничество объектов
Проект представлений набора разделяет данные, представляемые от способа, которым данные расположены и представлены на экране. Несмотря на то, что Ваше приложение строго ответственно за управление данными, которые будут представлены, его визуальным представлением управляют много различных объектов. Таблица 1-1 перечисляет классы представления набора в UIKit и организует их ролями, которые они играют в реализации интерфейса представления набора. Большинство классов разработано, чтобы быть использованным как есть без любой потребности в разделении на подклассы, таким образом, можно обычно реализовывать представление набора с очень небольшим количеством кода. И когда Вы хотите пойти вне предоставленного поведения, можно разделить на подклассы и обеспечить то поведение.
Цель | Классы/Протоколы | Описание |
---|---|---|
Включение верхнего уровня и управление | A A | |
Управление контентом |
| Объект источника данных является самым важным объектом, связанным с представлением набора, и является тем, который необходимо обеспечить. Источник данных управляет содержанием представления набора и создает представления, должен был представить то содержание. Для реализации объекта источника данных необходимо создать объект, соответствующий Делегат представления набора объект позволяет Вам прервать интересные сообщения от набора, просматривает и настраивает поведение представления. Например, Вы используете объект делегата отследить выбор и выделение элементов в представлении набора. В отличие от объекта источника данных, объект делегата является дополнительным. Для получения информации о том, как реализовать источник данных и объекты делегата, посмотрите Разработку Вашего Источника данных и Делегата. |
Представление | Все представления, выведенные на экран в представлении набора, должны быть экземплярами A | |
Расположение | Подклассы Во время процесса создания макета объект расположения создает объекты атрибута макета (экземпляры Объект расположения получает экземпляры Для получения дополнительной информации об объекте расположения, посмотрите Средства управления Объектом Расположения Визуальное Представление. | |
Перетекающий макет |
| |
Рисунок 1-1 показывает отношение между базовыми объектами, связанными с представлением набора. Представление набора получает информацию о ячейках для отображения от ее источника данных. Источник данных и объекты делегата являются пользовательскими объектами, предоставленными Вашим приложением и используемыми для управления содержанием, включая выбор и выделение ячеек. Объект расположения ответственен за решение, где те ячейки принадлежат и за отправку той информации к представлению набора в форме одного или более объектов атрибута макета. Представление набора тогда объединяет информацию макета с фактическими ячейками (и другие представления) для создания заключительного визуального представления.
Когда создание набора просматривает интерфейс, Вы сначала добавляете a UICollectionView
возразите против своей раскадровки или файла пера. Думайте о представлении набора как о центральном узле, от которого выделяются все другие объекты. После добавления, что объект, можно начать конфигурировать любые связанные объекты, такие как источник данных или делегат. Все конфигурации центрируются вокруг самого представления набора. Например, Вы никогда не создаете объект расположения, также не создавая объект представления набора.
Допускающие повторное использование представления улучшают производительность
Представления набора используют программу утилизации представления для повышения эффективности. Поскольку представления перемещаются вне экрана, они удалены из представления и размещены в очередь повторного использования вместо того, чтобы быть удаленным. Поскольку новое содержание прокручивается на экране, представления удаляются из очереди и повторно ставятся целью с новым содержанием. Для упрощения этой переработки и повторного использования все представления, выведенные на экран представлением набора, должны убывать от UICollectionReusableView
класс.
Представления набора поддерживают три отличных типа допускающих повторное использование представлений, каждое из которых имеет определенное намеченное использование:
Ячейки представляют основное содержание Вашего представления набора. Задание ячейки должно представить содержание для единственного элемента от Вашего объекта источника данных. Каждая ячейка должна быть экземпляром
UICollectionViewCell
класс, который можно разделить на подклассы по мере необходимости для представления содержания. Объекты ячейки предоставляют свойственную поддержку для управления их собственным выбором и состоянием выделения. Для фактического применения выделения к ячейке необходимо записать некоторый пользовательский код. Для получения информации о реализации выделения/выбора ячейки посмотрите Управление Визуальным состоянием для Выборов и Выделений.Дополнительные представления выводят на экран информацию о разделе. Как ячейки, дополнительные представления управляемы данными. В отличие от ячеек, дополнительные представления не обязательны, и их использование, и размещением управляет используемый объект расположения. Например, перетекающий макет поддерживает заголовки и нижние колонтитулы как дополнительные дополнительные представления.
Представления художественного оформления являются визуальными украшениями, находящимися в полной собственности расположения, возражают и не связываются ни к каким данным в Вашем объекте источника данных. Например, объект расположения мог бы использовать представления художественного оформления для реализации пользовательского фонового появления.
В отличие от табличных представлений, представления набора не налагают определенного стиля на ячейки и дополнительные представления, предоставленные Вашим источником данных. Вместо этого основные допускающие повторное использование классы представления являются пустыми полотнами для Вас для изменения. Например, можно использовать их, чтобы создать маленькие иерархии представления к изображениям на дисплее, или даже нарисовать содержание динамично.
Ваш объект источника данных ответственен за обеспечение ячеек и дополнительных представлений, используемых его связанным представлением набора. Однако источник данных никогда не создает представления непосредственно. Когда спросили относительно представления, Ваш источник данных исключает представление из очереди желаемого типа с помощью методов представления набора. Процесс исключения из очереди всегда возвращает допустимое представление, или путем получения один от очереди повторного использования или при помощи класса, файла пера или раскадровки, которую Вы обеспечиваете для создания нового представления.
Для получения информации о том, как создать и сконфигурировать представления от Вашего источника данных, видит Ячейки Конфигурирования и Дополнительные Представления.
Объект расположения управляет визуальным представлением
Объект расположения несет единоличную ответственность за определение размещения и визуальное моделирование элементов в представлении набора. Несмотря на то, что Ваш объект источника данных обеспечивает представления и фактическое содержание, объект расположения определяет размер, расположение и другие связанные с появлением атрибуты тех представлений. Это разделение ответственности позволяет изменить разметки динамично, не изменяя ни одного из объектов данных, которыми управляет Ваше приложение.
Процесс создания макета, используемый представлениями набора, связан с, но отличный от, процесс создания макета, используемый остальной частью представлений Вашего приложения. Другими словами, не путайте то, что объект расположения делает с layoutSubviews
метод раньше менял местоположение дочерних представлений в родительском представлении. Объект расположения никогда не касается представлений, которыми он управляет непосредственно, потому что ему фактически не принадлежит ни одно из тех представлений. Вместо этого это генерирует атрибуты, описывающие расположение, размер, и визуальное появление ячеек, дополнительные представления и представления художественного оформления в представлении набора. Это - тогда задание представления набора для применения тех атрибутов к фактическим объектам представления.
Нет никаких пределов тому, как объект расположения может влиять на представления в представлении набора. Объект расположения может переместить некоторые представления, но не других. Это может переместить представления только немного, или это может переместить их случайным образом вокруг экрана. Это может даже изменить местоположение представлений без любого отношения к окружающим представлениям. Например, объект расположения может сложить представления друг на друге, если он хочет. Единственное реальное ограничение - то, как объект расположения влияет на визуальный стиль, который Вы хотите, чтобы Ваше приложение имело.
Рисунок 1-2 показывает, как вертикально прокручивающий перетекающий макет располагает свои ячейки и дополнительные представления. В вертикально прокручивающем перетекающем макете ширина предметной области остается фиксированной, и высота растет для размещения содержания. Для вычислений области расположение возражает представлениям мест и ячейкам по одному, выбирая самое надлежащее расположение для каждого. В случае перетекающего макета размер ячеек и дополнительных представлений указан как свойства, или на объекте расположения или при помощи делегата. Вычисления расположения являются просто вопросом использования тех свойств для размещения каждого представления.
Объекты расположения управляют больше, чем просто размер и позиция их представлений. Объект расположения может указать другие связанные с представлением атрибуты, такие как его прозрачность, его преобразование в 3D пространстве и его видимость (если таковые имеются) выше или ниже других представлений. Эти атрибуты позволяют Вам создать более интересные разметки. Например, Вы могли бы создать штабели ячеек путем размещения представлений поверх друг друга и изменения их z-упорядочивания, или Вы могли бы использовать преобразование для вращения их на любой оси.
Для получения дальнейшей информации о том, как объект расположения выполняет свою ответственность перед представлением набора, посмотрите Пользовательские макеты Создания.
Представления набора инициируют анимации автоматически
Набор просматривает сборку в поддержке анимаций на фундаментальном уровне. Когда Вы вставляете (или удалите), элементы или разделы, представление набора автоматически анимирует любые представления, на которые повлияло изменение. Например, при вставке элемента, элементы после того, как точка вставки будет обычно смещена для создания места для нового элемента. Представление набора может создать эти анимации, потому что оно обнаруживает текущую позицию элементов и может вычислить их заключительные позиции после того, как вставка имеет место. Таким образом это может анимировать каждый элемент от своей начальной позиции до его заключительной позиции.
В дополнение к анимации вставок, удалений и операций пересылки, можно лишить законной силы расположение в любое время и вынудить его повторно вычислить свои атрибуты макета. Лишение законной силы расположения не анимирует элементы непосредственно; при лишении законной силы расположения представление набора выводит на экран элементы в их недавно расчетных позициях, не анимируя их. Вместо этого в пользовательском макете, Вы могли бы использовать это поведение расположить ячейки равномерно и создать анимируемый эффект.