"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
В докладе говорится о проектировании архитектуры API — начиная с того, о ком должен думать разработчик в начале работы, и до секретов «безболезненного» рефакторинга. От общей культуры формирования интерфейсов до правки багов и поддержки обратной совместимости. А также пара слов о документации — фасаде любого API.
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
При разработке интерфейсов для API, неизбежно сталкиваешься с несколькими проблемами. Во-первых, мы не знаем заранее, как будет выглядеть сервис или сайт со встроенными Картами. Важно обеспечить его будущим пользователям наилучший результат — даже если у разработчиков, использующих наш API, вообще нет в команде дизайнера. Во-вторых, проблемы могут возникнуть при адаптации дизайна для разных устройств и размеров экранов. В докладе мы поговорим о том, как и с помощью чего делаются прототипы, и зачем они нужны разработчикам и дизайнерам. А самое главное, разберёмся с адаптивным поведением элементов управления картой, рассмотрим схему работы менеджера контролов. Также мы кратко обсудим другие варианты реализации этого механизма и объясним, почему они не подошли нам.
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
В докладе говорится о проектировании архитектуры API — начиная с того, о ком должен думать разработчик в начале работы, и до секретов «безболезненного» рефакторинга. От общей культуры формирования интерфейсов до правки багов и поддержки обратной совместимости. А также пара слов о документации — фасаде любого API.
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
При разработке интерфейсов для API, неизбежно сталкиваешься с несколькими проблемами. Во-первых, мы не знаем заранее, как будет выглядеть сервис или сайт со встроенными Картами. Важно обеспечить его будущим пользователям наилучший результат — даже если у разработчиков, использующих наш API, вообще нет в команде дизайнера. Во-вторых, проблемы могут возникнуть при адаптации дизайна для разных устройств и размеров экранов. В докладе мы поговорим о том, как и с помощью чего делаются прототипы, и зачем они нужны разработчикам и дизайнерам. А самое главное, разберёмся с адаптивным поведением элементов управления картой, рассмотрим схему работы менеджера контролов. Также мы кратко обсудим другие варианты реализации этого механизма и объясним, почему они не подошли нам.
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"IT Event
В докладе пойдет речь о верстке для UITableView и, в частности, UICollectionView. Зимин Александр расскажет о том, почему стоит использовать UICollectionView чаще, чем вы думаете, как не сесть в лужу с оптимизацией и динамично подстраивать верстку под контент. Доклад будет сопровождаться работой в Xcode, реальными примерами кода и полезными ссылками.
Рассказывается о кроссплатформенном движке Cocos2d, его возможностях и основных принципах работы с движком.
Презентация к внутреннему докладу ООО Инним https://youtu.be/OKE6XdreE2g
Александр Зимин "Нестандартная верстка для стандартных компонентов в iOS"IT Event
В докладе пойдет речь о верстке для UITableView и, в частности, UICollectionView. Зимин Александр расскажет о том, почему стоит использовать UICollectionView чаще, чем вы думаете, как не сесть в лужу с оптимизацией и динамично подстраивать верстку под контент. Доклад будет сопровождаться работой в Xcode, реальными примерами кода и полезными ссылками.
Рассказывается о кроссплатформенном движке Cocos2d, его возможностях и основных принципах работы с движком.
Презентация к внутреннему докладу ООО Инним https://youtu.be/OKE6XdreE2g
12. Плюсы
• Скорость интеграции
• StaticCells
• Удобная интеграция UIRefreshControl
• Мелкие локальные улучшения
• Автоматическая отмена выделения
• Автоматическое отслеживание сдвига при
появлении клавиатуры
13. Минусы
• Нельзя задать размер таблицы
• Нельзя добавлять другие UIView на
UITableViewController
14. Плюсы
• Скорость интеграции
• StaticCells
• Удобная интеграция UIRefreshControl
• Мелкие локальные улучшения
• Автоматическая отмена выделения
• Автоматическое отслеживание сдвига при
появлении клавиатуры
15. func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
// Any actions here
}
Автоматическая отмена выделения
16. • Подписаться на уведомления о появлении и
исчезновении клавиатуры
• Менять contentInset и scrollIndicatorInsets
• Не забыть отписаться ;)
Автоматическое отслеживание
сдвига при появлении клавиатуры
21. Свой разделитель
• Создать класс, который наследуется от
UITableViewCell
• Для ячеек, созданных с интерфейса расширяем:
• awakeFromNib() (все связи гарантированно
подгружены)
• init(coder aDecoder: NSCoder)
• Для ячеек, созданных из кода:
• init(style: UITableViewCellStyle, reuseIdentifier:
String?)
22. Работа с выделением
• setSelected(selected: Bool, animated: Bool)
• setHighlighted(highlighted: Bool, animated: Bool)
• Задать selectedBackgroundView
29. Кастомный Pull-To-Refresh
• Создать кастомные UIView:
• Он должен отслеживать движение scrollView
• Можно сделать через KVO
• Можно сделать через target к жесту
• В методе scrollViewDidScroll: отслеживать
contentOffset и взаимодействовать с этим View
• Добавить этот view к верху таблицы
• Если идет загрузка можно
• Двигать contentInset
• Добавлять этот view в header таблицы
31. Release to Create Item
• Добавить UIPinchGestureRecognizer на таблицу
• Если жест начался, то расчитывать середину жеста
и добавлять новую ячейку
• При движении пальцев высчитывать размер для
этой ячейки и делать tableView.reloadData()
32. Release to Create Item
func pinchGestureAction(sender: UIPinchGestureRecognizer) {
if sender.state == .Began {
startValue = sender.scale
let point = sender.locationInView(tableView)
insertedIndexPath = tableView.indexPathForRowAtPoint(point)
} else if sender.state == .Changed {
deltaValue = abs(startValue - sender.scale)
} else {
insertedIndexPath = nil
}
reloadCells()
}
Самый элементарный вариант
33. Release to Create Item
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) ->
CGFloat {
if indexPath == insertedIndexPath {
return 80 * (1.0 + deltaValue)
}
return 80
}
Самый элементарный вариант