Pull to refresh

Кастомизация UICollectionViewLayout. Во имя искусства

Reading time 9 min
Views 21K
Development for iOS *Objective C *
Tutorial
Sandbox
Всем хэй хо!

Интро


Я работаю ios-разработчиком в провинциальном городе провинциальной страны ближайшего (по отношению к России) зарубежья. Около полутора лет назад страна решила, что я ей чего-то должен, а конкретно: должен год своей жизни, год низкоквалифицированного труда, год мечтаний о возвращении домой, к семье и работе… — одним словом, меня призвали в армию. И за этим делом я как-то пропустил выход iOS 6 со всеми ее фичами, в том числе и давно назревшего UICollectionView.
Разделавшись с нарядами, полигонами, уставом и прочими увлекательными вещами, я вернулся домой, снова начал работать, и конечно же проект, в котором заказчику было нужно отображение данных в виде того, что дизайнеры называют, «pinterest board», то есть собственно UICollectionView, не заставил себя ждать.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 10

Пишем универсальный UICollectionViewLayout

Reading time 4 min
Views 7.1K
Development for iOS *Development of mobile applications *Xcode *Swift *
Sandbox
UICollectionView может иметь практически любое расположение элементов. Элементы могут иметь как фиксированные размеры, так и динамические. В данной публикации внимание будет уделено только тем UICollectionViewLayout, размеры элементов которых фиксированы и задаются определенным алгоритмом (типичный пример — расположение иконок на экране Home вашего iPhone). Так же будет сделана попытка описать подход к формированию единого UICollectionViewLayout.

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

image

Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 0

UICollectionViewLayout для пиццы из разных половинок

Reading time 15 min
Views 16K
Dodo Engineering corporate blog Development for iOS *

Чтобы сделать пиццу из половинок мы использовали два UICollectionViewLayout. Рассказываю о том, как мы написали такой лейаут для iOS, с чем столкнулись и от чего отказались.


Total votes 42: ↑37 and ↓5 +32
Comments 17

Декомпозируя UICollectionViewCell

Reading time 8 min
Views 5.4K
Development for iOS *
Sandbox

После просмотра Keynote WWDC 2019 и знакомства с SwiftUI, предназначенного для декларативного описания UI в коде, хочется порассуждать о том, как можно декларативно наполнять таблички и коллекции. Например, вот так:


enum Builder {

    static func widgets(objects: Objects) -> [Widget] {
        let header = [
            Spacing(height: 25).widget,
            Header(string: "Выберите страну").widget,
            Spacing(height: 10, separator: .bottom).widget
        ]
        let body = objects
            .flatMap({ (object: Object) -> [Widgets] in
                return [
                    Title(object: object).widget,
                    Spacing(height: 1, separator: .bottom).widget
                ]
            })
        return header + body
    }
}

let objects: [Object] = ...
Builder
    .widgets(objects: objects)
    .bind(to: collectionView)

В коллекции это отрисуется следующим образом:

Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Comments 0

Понимаем UICollectionViewLayout на примере Photos App

Reading time 14 min
Views 16K
Content AI corporate blog Development for iOS *Development of mobile applications *Swift *Mobile applications design *
Здравствуй, Хабр! Меня зовут Никита, я работаю над мобильными SDK в компании ABBYY и в том числе занимаюсь UI-компонентом для сканирования и удобного просмотра многостраничных документов на смартфоне. Этот компонент сокращает время на разработку приложений на базе технологии ABBYY Mobile Capture и состоит из нескольких частей. Во-первых, камера для сканирования документов; во-вторых, экран редактора с результатами захвата (то есть автоматически сделанными фотографиями) и экран исправления границ документа.

Разработчику достаточно вызвать пару методов – и вот в его приложении уже доступна камера, которая автоматически сканирует документы. Но, помимо настроенных камер, нужно предоставить клиентам удобный доступ к результатам сканирования, т.е. автоматически сделанным фотографиям. А если клиент сканирует договор или устав, то таких фотографий может быть очень много.

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



В качестве референсов я часто обращаю внимание на системные приложения Apple. Когда внимательно смотришь на анимации и другие интерфейсные решения их приложений, то начинаешь восхищаться их внимательным отношением к разного рода мелочам. Сейчас мы в качестве референса будем смотреть на приложение Photos (iOS 12). Я обращу ваше внимание на конкретные фичи этого приложения, а дальше мы попробуем их реализовать.
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 3

Compositional Layout в iOS 13. Основы

Reading time 12 min
Views 30K
Development for iOS *Swift *

Добрый день,


На практике iOS разработчик часто сталкивается с задачей показа большого количества информации в виде списка или в виде коллекции, как правило, для этого отлично подходят UITableView или UICollectionView. Также часто встречается задача реализации экрана, который представляет собой комбинацию списка и коллекции.


В данной статье рассмотрим, какие новые возможности принесла iOS 13 для реализации этой задачи.


Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Comments 5

Мой Covid-19 lockdown проект, или, как я полез в кастомный UICollectionViewLayout и получил ChatLayout

Reading time 11 min
Views 4K
Development for iOS *Development of mobile applications *Xcode *Swift *

image


Да, да. Я понимаю, что на дворе 2020 год, что все хардкорные IOS разработчики пишут исключительно на SwiftUI и Combine, и писать статьи про UIKit как-то “не айс”. Тем не менее, 2020 год выдался не таким, как все предыдущие года. Совсем не таким.


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

Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 22

Compositional Layout: стоит ли игра свеч?

Reading time 8 min
Views 10K
VK corporate blog Delivery Club Tech corporate blog Development for iOS *Development of mobile applications *Interfaces *


Всем привет! Меня зовут Алексей Скоробогатов, я ведущий iOS-разработчик в Delivery Club. Сегодня я хотел бы рассказать про вёрстку в нашем приложении на примере использования Compositional Layout. В конце прошлого года волевым решением iOS-команды и апрувом руководства мы перешли на iOS 13+. Этот манёвр позволил нам начать использовать новые нативные инструменты, в том числе и новый декларативный подход к описанию layout-коллекций. Расскажу о переводе нашего экрана поиска и его компонентов на Compositional Layout, а также о проблемах, с которыми я столкнулся.

Для полноценного представления о Compositional Layout предлагаю прочитать вот эту статью и ознакомиться с примерами Apple.
Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 2

Регулировка contentOffset с помощью UICollectionViewLayout

Reading time 5 min
Views 1.6K
Development for iOS *Swift *
Sandbox

Один из распространенных UI элементов в iOS является UICollectionView.

Часто при построении таких коллекций возникает необходимость обновления данных, например добавления новых ячеек в коллекцию.

Рассмотрим простой пример - список новостей, вертикальный UICollectionView. При пролистывании списка вниз, необходимо подгружать старые новости. В данном случае все просто - нужно обновить данные и выполнить один из методов:

Читать далее
Total votes 3: ↑3 and ↓0 +3
Comments 2