iOS6 SDK — изменения в UIKit

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

NSAttributedString и UIKit

Для начала — то, что лично я ожидал еще в iOS 5 — поддержка NSAttributedString в текстовых компонентах — UILabel, UITextView, UITextField, а так же поддержка отрисовки строк с атрибутами и различные вспомогательные методы для этого. Конечно, весь этот функционал был доступен и раньше, используя Core Text, но работать с API стиля Core Foundation все же сложнее, так что можно смело ожидать улучшения поддержки форматирования текста (Rich Text) во многих сторонних приложениях. В качестве примера можно посмотреть стандартное приложение Mail.

Auto Layout в iOS

Очень важное нововведение — в iOS 6 появится Auto Layout от MacOS Lion. Теперь задавать положение компонентов интерфейса относительно друг друга станет проще. В кратце, Auto Layout позволяет задать набор ограничений (constraints), связывающих компоненты, например позволяет задавать границы размеров, зависимости между компонентами. Надеюсь это позволит облегчить создание интерфейса для нескольких языков (сейчас иногда приходится создавать отдельный nib/storyboard), включая арабские с написанием справа налево, а также упростит настройку интерфейса в зависимости от ориентации устройства. На данный момент документации для iOS по Auto Layout еще нет, нам предлагают документацию от MacOS.

Изменения в UITableView

UITableView, конечно, не могли оставить без внимания. Добавлен класс UITableViewHeaderFooterView для задания пользовательских view верхних и нижних колонтитулов (header/footer) секций. Также при создании данному классу можно задать reuseIdentifier, в таком случае UITableView поместит колонтитул в очередь для повторного использования. Приятное нововведение — возможность регистрации класса либо nib’а, который будет использоваться для создания очередной ячейки таблицы. Обновился протокол делегата таблицы, теперь он позволяет узнавать когда таблица перестает использовать ячейку либо колонтитул для отрисовки, также появились дополнительные методы для управления подсветкой ячеек. UITableViewController обзавелся свойством refreshControl, позволяющим задать UIRefreshControl для обновления таблицы. Возможно этот контрол есть pull to refresh, возможно он будет отличаться.

Преемник UITableView — UICollectionView

Появилось интересное развитие UITableView — UICollectionView, который позволяет задать расположение данных в несколько колонок, по кругу итд. В целом внутреннее устройство очень похоже на таблицу — есть источник данных (data source) с похожим протоколом, есть делегат и контроллер. Но есть и серьезные отличия — данный класс изначально работает с учетом последних изменений в TableView, т.е. требует регистрации класса либо nib’а, которые будут использоваться для создания новых ячеек и дополнительных view (Supplementary View и Decoration View). Так же появился общий класс UICollectionReusableView, от которого наследуется как класс ячейки UICollectionViewCell так и классы, используемые в качестве дополнительных. Важное отличие от таблицы — класс UICollectionViewLayout, который собственно позволяет задать расположение ячеек и их вид с помощью атрибутов, которые объединены в класс UICollectionViewLayoutAttributes. Интересно что в том числе есть атрибуты transform3D и zIndex, что позволит создавать интересные расположения ячеек в трехмерном пространстве. Разработчикам нужно будет создавать собственные реализации класса UICollectionViewLayout, либо использовать предоставленную конкретную реализацию, представляющую собой расположение элементов сеткой — UICollectionViewFlowLayout. Примеры использования уже можно увидеть на скриншотах беты iOS 6, например интерфейс выбора как поделиться какой-либо информацией (Facebook, Twitter, Print и т.д.) скорее всего реализован на основе UICollectionViewFlowLayout.

UIActivityViewController — замена ShareKit

Следующее интересное нововведение — UIActivityViewController, позволяющий упростить шаринг данных и заменить сторонние ShareKit и прочие аналоги. При создании контроллеру передается массив объектов, над которыми могут быть произведены действия и массив самих действий. На данный момент поддерживаются Facebook, Twitter, Weibo (как быстро полюбили Китай!), отправка данных по почте, с помощью приложения Messages, печать объекта, копирование объекта на Pasteboard и установка объекта (изображения) контакту. Также возможно создание собственных сервисов.

UI State Preservation

Ну и последнее — UI State Preservation позволяет сохранить состояние и при повторном запуске восстановить его. Во время сохранения приложение указывает какие view и контроллеры нужно сохранить плюс сохраняет дополнительные данные, и при восстановлении указанные view и контроллеры будут восстановлены. При должном использовании это позволит еще сильнее упростить работу пользователей с приложениями iOS — не надо сохранять, экспортировать, синхронизировать, вспоминать что делал и т.д., iOS предоставляет все больше и больше решений для разработчиков чтобы сделать работу пользователей/клиентов еще приятнее.

Вывод?

Ну и кратенький вывод. Я описал основные, на мой взгляд, изменения во фреймворке UIKit, хотя и остальные фреймворки получили солидные изменения, появились и новые фреймворки (Social, Pass Kit). И хотя каждая новая версия iOS кажется все менее значительной, я это отношу к зрелости самой платформы, ведь текущая версия iOS предоставляет потрясающие возможности, и удивить разработчиков становится все сложнее и сложнее. Те же изменения, которые представила Apple, позволят сделать общение пользователя с приложениями еще более приятным, и именно эти качественные изменения в iOS 6 составляют на мой взгляд наибольший интерес для разработчиков. Появление же Auto Layout от старшего собрата в очередной раз показывает влияние iOS и MacOS друг на друга. Долго ли осталось ждать их объединения и как это произойдет?
Share post

Similar posts

Comments 16

  • UFO just landed and posted this here
      +2
      По моему, очевидно что все эти фичи доступны только для iOS 6
        +1
        Земляк :) Я думаю вопрос был насчет как приложения для предыдущих версий будут работать с 6. Лично сталкивался с проблемами в этом плане, когда изменения в API ломали не очень хорошо написанные приложения. Да и в AppStore частый апдейт — «Исправлен краш в iOS4/5». Будут такие апдейты и для 6 наверняка.
        0
        Хорошее замечание. Посмотрю какие камни могут быть, обновлю если будет что-то интересное.
          +1
          Сейчас уже всплыл косяк с UITableView со стайлом UITableViewStyleGrouped. Недостаточно просто задать backgroundColor, нужно явно указать backgroundView = nil; иначе все полосатое.
            0
            А если поддерживаешь iOS <3.2, то еще и городить городуленьку — т.к. свойство backgroundView появилось позже. Я прав?
              0
              Аааааа. Апп уже в ревью ((
                0
                Тогда советую готовить апдейт как можно быстрее. Ситуация, когда приложение с косяками для старых осей проходило ревью, а потом получало негативные отзывы мне известна и знакома…
          –2
          Меня CoreText устраивает, вполне юзабельно, мой эксперемент www.developers-life.com/wp-content/uploads/2011/11/photo.png
            0
            *эксперИмент
            0
            Спасибо за обзор.
            Осталось дождаться когда доклады с WWDC опубликуют и будет щасте!
              0
              уже весь в предвкушении!
                +1
                Опубликовали! Понеслась :)
                +2
                Нам еще не разрешают полностью iOS 5 SDK использовать, а год назад то же самое было с iOS4 SDK. А тут уже 6 версия, и чтото точно сломается.
                  0
                  по Auto Layout, первая мысль, что это небольшая помощь для нового айфона, который по слухам будет иметь 4" экран с другим соотношением сторон (вытянут в высоту)
                    0
                    Всё это хорошо, но когда же наконец начнут разработчики iOS уважать веб-разработчиков и действительно реализовывать стандарты, а не делать криво работающие заглушки?..

                    Яркий пример: воспроизведение видео HTML5 (речь не о поддерживаемых типах и кодеках, а о реализации самого API).
                    blog.millermedeiros.com/unsolved-html5-video-issues-on-ios/
                    blog.millermedeiros.com/ipad-is-the-new-ie6/
                    blog.millermedeiros.com/html5-video-issues-on-the-ipad-and-how-to-solve-them/

                    Большинство действительно не сталкивается с этим, поскольку не делает ничего сложнее воспроизведения файлов с видеохостинга.

                    Ко всему этому, движок Safari — единственный доступный, причем даже для сторонних браузеров. И его даже можно настроить немного — но только из нативного приложения!

                    И самое обидное то, что это есть результат политики компании, поскольку с нативных приложений они имеют доход, а с открытого веба такого механизма, естественно, нет…

                    Only users with full accounts can post comments. Log in, please.