SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Новые концепции
и новые средства
iOS 7
• Минимум визуальных
элементов управления —
максимум контента
iOS 7
• Продвинутые анимации
для отображения реакции
элементов на действия
пользователя
iOS 7
• Сохранение контекста
• Глубина (прозрачность,
размытие)
UI
• Больше контента
• Больше обратной связи в виде
анимаций
• Больше динамики во взаимодействии
• Физика
• Глубина (прозрачность, размытие)
Collection View
Контент
• Контент — набор элементов (коллекция)
• Задачи:
- показать элементы коллекции
- навигация по коллекции
- редактирование коллекции
- анимации элементов
UITableView
• Элементы — ячейки списка
• Навигация — вертикальный скроллинг
• Редактирование —
принудительное (кнопка), свайпы,
лонгтап (перемещение)
• Анимации — встроенные (fade, bottom,
automatic…), изменение высоты ячеек
UITableView
• Плюсы:
- механизм reusable-ячеек
- хорошо реализует наиболее частый
случай отображения (список)
- простой API
• Проблемы:
- ограничения лэйаута
- ограничения интерфейса API
Что делать с этим?
UITableView
• Чем более естественно и интересно мы
хотим отобразить коллекцию, тем сложнее
нам заставить это делать UITableView
• Так было до iOS 6
• Большасть часть лэйаута была скрыта в
SDK
• Почему бы не отдать лэйаут коллекции в
руки программисту?
UICollectionView
• Появилась отдельная сущность, которая
занимается лэйаутом
UICollectionViewLayout
UICollectionView UICollectionViewLayout
Delegate
Data Source
UICollectionView
• Механизм reusable-ячеек
• Максимально обобщённый API:
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)
- наша задача — определять, какие indexPath
соответствуют элементам внутри запрашиваемого
прямоугольника
• Отдельные сущности для ячейки и её
атрибутов — UICollectionViewLayoutAttributes
UICollectionView
Delegate
Data Source
Ячейки показываются
для indexPath
атрибутов, которые
вернул
UICollectionViewLayout
Cell
UICollectionViewLayout
Атрибуты
{
indexPath
frame
…
rect
transform
UICollectionView
• Cell — элемент коллекции
• Supplementary — соответствует функции от
элемента коллекции (например, заголовок
секции)
• Decoration — элемент лайаута!
Анимация
UICollectionView
• Поддержка автоматической анимации
смены лэйаута
Cell
Layout 1 : Attribute
Layout 2 : Attribute
UICollectionView
• Атрибуты — это характеристика ячейки с
точки зрения лэйаута
• Конечно, поддержка наследников
• Разделение понятия элемента и его
представления в рамках одного лэйаута
UICollectionView
• В результате получаем максимально
настраиваемое отображение и поведение
коллекций
• Механизм reusable ячеек
• Анимация смены лэйаута
• Если нужны обычные списки, то есть
встроенный UICollectionViewFlowLayout,
который заменит вам Table View
Dynamics
UIKit Dynamics
• Новый взгляд на дизайн
Визуально
показываем
пользователю, что
элемент делает:
тени
выпуклость
…
До iOS 7
Интерфейс
“реагирует” на
взаимодействие,
как будто это
физический
элемент среды
iOS 7
UIKit Dynamics
Animator
Collision
View View View View
Bounce
Gravity Collision
UIDynamicItem
• Элементами среды могут быть не только
UIView
• Протокол
- center
- transform
- bounds
UIDynamicItem
• Это не обязательно UIView, а всё, что
удовлетворяет протоколу
• Collection View Layout атрибуты
удовлетворяют протоколу!
• Можно использовать связку
UICollectionView + Dynamics
• Пример:
- Messages в iOS 7
Где использовать?
★ Конечно, для анимаций
★ В коллекциях — dynamics слегка оживит
элементы
- Только там, где взаимодействие
пользователя с коллекцией
действительно схоже с реальностью
• Для задания сложного лэйаута, когда
Auto Layout не спасает
Auto Layout
Зачем?
• Представление контента —
первоочередная задача
• Много динамики, связей и сценариев
поведения, а как следствие — много
вариантов отображения контента
• Становится сложнее уследить за фреймами
• Autoresizing mask спасает, но далеко не
всегда
Springs & Struts
• Проблема в императивном стиле
• Явное указание системе, что и где
расположить
• Много связей — много пересчета фрэймов
• Пересчет фрэймов — потенциальное место
для ошибки
• Никогда не уверены, все ли кейсы учтены
Auto Layout
• Пусть пересчетом занимается система
• Мы определим правила и опишем их для
системы
• Декларативный стиль
• Описываем цель, а не способ её
достижения
• Ловим ошибки на этапе описания правил
Auto Layout
• Система линейных уравнений/неравенств
• Каждое решение — вариант расположения
элементов
• Становится возможным указывать на
зависимости между параметрами
элементов
• Intrinsic size — размер элемента в
зависимости от контента
Text Kit
Что было?
UI Kit
Core Graphics
Core Text
Что было?
• UIKit
- примитивная обработка текста
- UILabel
- добавили NSAttributedString
- проблемы при работе с
пользовательскими шрифтами
- сложно реализовать задумки
дизайнера
Что было?
• Core Text
- низкоуровневое мощное средство
- Frame, Line, Run, Glyph
- сложности во взаимодействии с UIKit
- часто необходимо спускаться на
уровень Core Graphics для обработки и
“особого” вывода глифов
Text Kit
• iOS 7
- Objective-C интерфейс API
- Сравним по возможностям с Core Text
- Отличная работа с пользовательскими
шрифтами
- Полная интеграция с UI Kit
Архитектура
Text Container
Text Storage
Layout Manager
Преимущества
Text Container
Text Storage
Layout Manager 1
Преимущества
Text Container
Text Storage
Layout Manager 1 Layout Manager 1
Преимущества
Text Container 1
Text Storage
Layout Manager 1 Layout Manager 1
Text Container 2
NSLayoutManager
• Character + Font = Glyph
• Glyphs + Locations = Text Layout
• Это контроллер
• Берёт данные из NSTextStorage и
отображает их в NSTextContainer
• Настраиваем через делегата и
наследование
Спасибо!
kiselev@anyvoid.ru

Más contenido relacionado

Similar a iOS 7. Новые концепции и новые средства

Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...DevGAMM Conference
 
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"IT Event
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Eugene Fidelin
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализMaksim Nikitin
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, ЯндексYandex
 
Автоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовАвтоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовSergey Borisov
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays
 
Mobile Saturday. Тема 4. Автоматизация тестирования верстки (Александр Хотем...
Mobile Saturday. Тема 4. Автоматизация тестирования верстки  (Александр Хотем...Mobile Saturday. Тема 4. Автоматизация тестирования верстки  (Александр Хотем...
Mobile Saturday. Тема 4. Автоматизация тестирования верстки (Александр Хотем...GoIT
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Александр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущегоАлександр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущегоCocoaHeads
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
А.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерииА.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерииAnatoly Levenchuk
 
Sozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_stepsSozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_stepsStiv-redter
 

Similar a iOS 7. Новые концепции и новые средства (20)

Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
 
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
 
Автоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотовАвтоматическое тестирование мобильных приложений на основе скриншотов
Автоматическое тестирование мобильных приложений на основе скриншотов
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
 
Mobile Saturday. Тема 4. Автоматизация тестирования верстки (Александр Хотем...
Mobile Saturday. Тема 4. Автоматизация тестирования верстки  (Александр Хотем...Mobile Saturday. Тема 4. Автоматизация тестирования верстки  (Александр Хотем...
Mobile Saturday. Тема 4. Автоматизация тестирования верстки (Александр Хотем...
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Александр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущегоАлександр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущего
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
А.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерииА.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерии
 
Sozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_stepsSozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_steps
 

iOS 7. Новые концепции и новые средства

  • 2. iOS 7 • Минимум визуальных элементов управления — максимум контента
  • 3. iOS 7 • Продвинутые анимации для отображения реакции элементов на действия пользователя
  • 4. iOS 7 • Сохранение контекста • Глубина (прозрачность, размытие)
  • 5. UI • Больше контента • Больше обратной связи в виде анимаций • Больше динамики во взаимодействии • Физика • Глубина (прозрачность, размытие)
  • 7. Контент • Контент — набор элементов (коллекция) • Задачи: - показать элементы коллекции - навигация по коллекции - редактирование коллекции - анимации элементов
  • 8. UITableView • Элементы — ячейки списка • Навигация — вертикальный скроллинг • Редактирование — принудительное (кнопка), свайпы, лонгтап (перемещение) • Анимации — встроенные (fade, bottom, automatic…), изменение высоты ячеек
  • 9. UITableView • Плюсы: - механизм reusable-ячеек - хорошо реализует наиболее частый случай отображения (список) - простой API • Проблемы: - ограничения лэйаута - ограничения интерфейса API
  • 11.
  • 12. UITableView • Чем более естественно и интересно мы хотим отобразить коллекцию, тем сложнее нам заставить это делать UITableView • Так было до iOS 6 • Большасть часть лэйаута была скрыта в SDK • Почему бы не отдать лэйаут коллекции в руки программисту?
  • 13. UICollectionView • Появилась отдельная сущность, которая занимается лэйаутом UICollectionViewLayout UICollectionView UICollectionViewLayout Delegate Data Source
  • 14.
  • 15. UICollectionView • Механизм reusable-ячеек • Максимально обобщённый API: - (NSArray *)layoutAttributesForElementsInRect:(CGRect) - наша задача — определять, какие indexPath соответствуют элементам внутри запрашиваемого прямоугольника • Отдельные сущности для ячейки и её атрибутов — UICollectionViewLayoutAttributes
  • 16. UICollectionView Delegate Data Source Ячейки показываются для indexPath атрибутов, которые вернул UICollectionViewLayout Cell UICollectionViewLayout Атрибуты { indexPath frame … rect transform
  • 17. UICollectionView • Cell — элемент коллекции • Supplementary — соответствует функции от элемента коллекции (например, заголовок секции) • Decoration — элемент лайаута!
  • 19. UICollectionView • Поддержка автоматической анимации смены лэйаута Cell Layout 1 : Attribute Layout 2 : Attribute
  • 20. UICollectionView • Атрибуты — это характеристика ячейки с точки зрения лэйаута • Конечно, поддержка наследников • Разделение понятия элемента и его представления в рамках одного лэйаута
  • 21. UICollectionView • В результате получаем максимально настраиваемое отображение и поведение коллекций • Механизм reusable ячеек • Анимация смены лэйаута • Если нужны обычные списки, то есть встроенный UICollectionViewFlowLayout, который заменит вам Table View
  • 23. UIKit Dynamics • Новый взгляд на дизайн Визуально показываем пользователю, что элемент делает: тени выпуклость … До iOS 7 Интерфейс “реагирует” на взаимодействие, как будто это физический элемент среды iOS 7
  • 24. UIKit Dynamics Animator Collision View View View View Bounce Gravity Collision
  • 25. UIDynamicItem • Элементами среды могут быть не только UIView • Протокол - center - transform - bounds
  • 26. UIDynamicItem • Это не обязательно UIView, а всё, что удовлетворяет протоколу • Collection View Layout атрибуты удовлетворяют протоколу! • Можно использовать связку UICollectionView + Dynamics • Пример: - Messages в iOS 7
  • 27. Где использовать? ★ Конечно, для анимаций ★ В коллекциях — dynamics слегка оживит элементы - Только там, где взаимодействие пользователя с коллекцией действительно схоже с реальностью • Для задания сложного лэйаута, когда Auto Layout не спасает
  • 29. Зачем? • Представление контента — первоочередная задача • Много динамики, связей и сценариев поведения, а как следствие — много вариантов отображения контента • Становится сложнее уследить за фреймами • Autoresizing mask спасает, но далеко не всегда
  • 30. Springs & Struts • Проблема в императивном стиле • Явное указание системе, что и где расположить • Много связей — много пересчета фрэймов • Пересчет фрэймов — потенциальное место для ошибки • Никогда не уверены, все ли кейсы учтены
  • 31. Auto Layout • Пусть пересчетом занимается система • Мы определим правила и опишем их для системы • Декларативный стиль • Описываем цель, а не способ её достижения • Ловим ошибки на этапе описания правил
  • 32. Auto Layout • Система линейных уравнений/неравенств • Каждое решение — вариант расположения элементов • Становится возможным указывать на зависимости между параметрами элементов • Intrinsic size — размер элемента в зависимости от контента
  • 34. Что было? UI Kit Core Graphics Core Text
  • 35. Что было? • UIKit - примитивная обработка текста - UILabel - добавили NSAttributedString - проблемы при работе с пользовательскими шрифтами - сложно реализовать задумки дизайнера
  • 36.
  • 37. Что было? • Core Text - низкоуровневое мощное средство - Frame, Line, Run, Glyph - сложности во взаимодействии с UIKit - часто необходимо спускаться на уровень Core Graphics для обработки и “особого” вывода глифов
  • 38. Text Kit • iOS 7 - Objective-C интерфейс API - Сравним по возможностям с Core Text - Отличная работа с пользовательскими шрифтами - Полная интеграция с UI Kit
  • 42. Преимущества Text Container 1 Text Storage Layout Manager 1 Layout Manager 1 Text Container 2
  • 43. NSLayoutManager • Character + Font = Glyph • Glyphs + Locations = Text Layout • Это контроллер • Берёт данные из NSTextStorage и отображает их в NSTextContainer • Настраиваем через делегата и наследование