Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Микроинтеракции в iOS
Search
CocoaHeads
September 29, 2018
Programming
0
190
Микроинтеракции в iOS
CocoaHeads
September 29, 2018
Tweet
Share
More Decks by CocoaHeads
See All by CocoaHeads
Тесты: Повторение. Виктор Суриков
cocoaheads
0
41
Sign In with Apple (client + server). Петр Третьяков
cocoaheads
0
120
Эволюция антипаттернов в Java и Kotlin. Михаил Горюнов
cocoaheads
0
120
Рефакторинг в условиях быстрорастущего стартапа. Егор Фесенко
cocoaheads
0
28
Make Experiments Great Again, или Как iOS Браузер А/Б тестирование улучшал
cocoaheads
0
50
Лотерея в приложении: отрисовка, анимация и никакого мошенничества
cocoaheads
0
53
SceneKit на практике
cocoaheads
0
84
Пишем под iOS на Flutter
cocoaheads
0
120
Выходные с Kotlin/Native
cocoaheads
0
57
Other Decks in Programming
See All in Programming
使ってみよう Azure AI Document Intelligence
kosmosebi
2
270
エンターテイメント業界で利用されるAWS
demuyan
0
210
Rails と人魚の話/rails-and-mermaid
sanfrecce_osaka
0
100
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
870
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
250
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
250
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
860
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
220
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
6
890
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
320
雑に思考を整理する技術と効能
konifar
58
28k
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
3.9k
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
27
6.3k
How GitHub (no longer) Works
holman
304
140k
A Tale of Four Properties
chriscoyier
150
22k
Rebuilding a faster, lazier Slack
samanthasiow
72
8.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
77
42k
Atom: Resistance is Futile
akmur
258
25k
Typedesign – Prime Four
hannesfritz
36
2.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
259
12k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
What's new in Ruby 2.0
geeforr
337
31k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
119
39k
Transcript
Антон Сергеев Микроинтеракции в iOS
None
Лоадер 3
Содержание 4 › Модель микроинтеракций › Микроинтеракции с помощью CAAction
› Примеры
Модель микроинтеракций
Модель, описывающая взаимодействие с приложением Модель микроинтеракций
7 Триггер Бизнес- логика Обратная связь Изменение состояния Модель микроинтеракций
8 Пользователь UX-Дизайнер Разработчик Модель микроинтеракций
Пользователь
10 Триггер Бизнес- логика Обратная связь Изменение состояния Пользователь
11 Триггер Бизнес- логика Обратная связь Изменение состояния Пользователь
12 Триггер Бизнес- логика Обратная связь Изменение состояния Пользователь
13 Триггер Бизнес- логика Обратная связь Изменение состояния Пользователь
UX-Дизайнер
15 Триггер Бизнес- логика Обратная связь Изменение состояния UX-Дизайнер
16 Триггер Бизнес- логика Обратная связь Изменение состояния UX-Дизайнер
17 Триггер Бизнес- логика Обратная связь Изменение состояния UX-Дизайнер
18 Триггер Бизнес- логика Обратная связь Изменение состояния UX-Дизайнер
Разработчик
20 Триггер Бизнес- логика Обратная связь Изменение состояния Разработчик
21 Триггер Бизнес- логика Обратная связь Изменение состояния Разработчик
22 Триггер Бизнес- логика Обратная связь Изменение состояния Разработчик
23 Триггер Бизнес- логика Обратная связь Изменение состояния Разработчик
Модель, описывающая взаимодействие с приложением Модель микроинтеракций
25 Триггер Бизнес- логика Обратная связь Изменение состояния Модель микроинтеракций
Микроинтеракции с помощью CAAction
Микроинтеракции с помощью CAAction 27 UIView CALayer как хранилище состояний
Действия CAAction
UIView
29 › UIView получает сообщения о касаниях › …и других
внешних событиях UIView
30 Триггер Бизнес- логика Обратная связь Изменение состояния UIView
31 › UIView сообщает о событиях делегатам › UIView рассылает
сообщения подписчикам UIView
32 Триггер Бизнес- логика Обратная связь Изменение состояния UIView
delegate UIView 33 UIView CALayer
CALayer как хранилище состояний
delegate CALayer как хранилище состояний 35 UIView CALayer Обновление хранилища
CALayer — ассоциативный массив CALayer как хранилище состояний
class CALayer: NSObject { override func setValue(_ value: Any?, forKey
key: String) } layer.setValue(true, forKey: “isActive”) CALayer как хранилище состояний
Поддержка стилей CALayer как хранилище состояний
class CALayer { var style: [AnyHashable: Any]? { get set
} } CALayer как хранилище состояний
class CALayer { func value(forKey key: String) -> Any? }
style.key ?? style.style.key ?? style.style.style.key … CALayer как хранилище состояний
41 Триггер Бизнес- логика Обратная связь Изменение состояния CALayer как
хранилище состояний
Действия CAAction
delegate Действия CAAction 43 UIView CALayer Обновление хранилища Запрос CAAction
protocol CAAction { func run(forKey event: String, object anObject: Any,
arguments dict: [AnyHashable : Any]?) } Действия CAAction
45 Примеры CAAction: › CAAnimation › NSNull Действия CAAction
extension UIView: CALayerDelegate { func action(for layer: CALayer, forKey event:
String) -> CAAction? { ... } } Действия CAAction
class CALayer { func action(forKey event: String) -> CAAction? {
let action = delegate.action(for: self, forKey: event) ?? actions[event] ?? style.actions[event] ?? style.style.actions[event] ?? ... CALayer.defaultAction(forKey: event) return action == NSNull() ? nil : action } } Действия CAAction
Примеры
Анимация хранимых свойств
Анимация хранимых свойств
view.backgroundColor = red { didSet { layer.backgroundColor = red }
} Анимация хранимых свойств
layer.backgroundColor { action = self.action(forKey: backgroundColor) self.storage.backgroundColor = red action.run(forKey:
backgroundColor, object: self, arguments: nil) } Анимация хранимых свойств
53 › В блоке анимации анимируется › Вне блока анимации
не анимируется Анимация хранимых свойств
extension UIView: CALayerDelegate { func action(for layer: CALayer, forKey event:
String) -> CAAction? { ... } } Действия CAAction
UIView вне блока анимации при поиске действия возвращает NSNull Анимация
хранимых свойств
class var inheritedAnimationDuration: TimeInterval Анимация хранимых свойств
class CALayer { func setValue(_ value: Any?, forKey key: String)
{ action = action(forKey: key) storage[key] = value action.run(forKey: key, object: self, arguments: nil) } } Анимация хранимых свойств
Анимация событий
Анимация событий
class CALayer { func setValue(_ value: Any?, forKey key: String)
{ action = action(forKey: key) storage[key] = value action.run(forKey: key, object: self, arguments: nil) } } Анимация событий
class CustomView { func activate() { action = layer.action(forKey: activate)
action.run(forKey: activate, object: layer, arguments: nil) } } Анимация событий
Лоадер
Лоадер 63
None
None
None
67 Триггер Бизнес- логика Обратная связь Изменение состояния CALayer как
хранилище состояний
None
class Loader: UIView { var isActive: Bool // activate, deactivate
var progress: Double // updateProgress // kCAOnOrderIn // kCAOnOrderOut } Лоадер
70 › 5 событий * 6 состояний = 30 CAAction
Лоадер
Сложная задача превратилась в набор простых Лоадер
Заключение
73 Триггер Бизнес- логика Обратная связь Изменение состояния Заключение
Используйте модель микроинтеракций
Используйте CAAction для реализации микроинтеракций
Антон Сергеев Команда Яндекс.Карты @antonsergeev88 Спасибо за внимание
P.S.:
P.S.: Ассоциативный массив 78 › CALayer › CAAnimation
P.S.: Блог Карт на Medium 79 medium.com/yandex-maps-ios