SlideShare a Scribd company logo
1 of 25
Download to read offline
SioriでどのようにCustom Transitionを実装しているか 
2014/09/24 
弥真 フィラース
自己紹介
弥真(やしん) フィラース 
! 
2013年5月よりウォンテッドリー株式会社にデ 
ザイナーとして参加。 
! 
UI/UXの設計・デザインはもちろん、フロント 
エンドの実装もやってます(Web、アプリ両方) 
! 
詳しいプロフィール 
→https://www.wantedly.com/users/42889
Sioriリリースしました!
なんでジェスチャー操作? 
・ボタンとか非ジェスチャーに比べ入力領域が広いので、   
 画面サイズが大きくても操作が圧倒的に楽だし早い 
! 
・直感的に使えて操作が楽しい! 
! 
・カスタムのtransitionがアプリの個性になる 
! 
! 
言葉で説明するより実際に使ってもらったほうがわかると 
思うのでダウンロードして使ってみてください!
Custom Transition 
の仕組み
Custom Transitionを形成する3つの要素 
fromViewController 
移動元のviewController 
! 
! 
toViewController 
移動先のviewController 
! 
! 
animationController 
animationの制御をする
Push / Popの場合 
pushまたはpopViewControllerでviewcontroller間の移動 
開始 
navigation controllerのdelegateメソッドである 
‑navigationController: animationControllerForOperation: 
fromViewController: toViewController: 
が呼ばれる 
animationControllerを返す
Push / Popの場合 
pushまたはpopViewControllerでviewcontroller間の移動 
開始 
navigation controllerのdelegateメソッドである 
‑navigationController: animationControllerForOperation: 
fromViewController: toViewController: 
が呼ばれる 
animationControllerを返す 
ここでcustom用のanimationController返す
animationControllerってなに? 
UIViewControllerAnimatedTransitioningのprotocolを実装したオブジェクト 
animationController内で二つのメソッドを定義する必要がある 
・transitionDuration 
 transitionのアニメーションの合計時間を返す 
・animateTransition 
 transitionのアニメーションを定義する。  
 引数でtransitionContextを受け取る。transitionContextから 
 fromViewController、toViewController、containerViewが 
 取れるのでそれを使ってアニメーションを定義する。
Custom Transition 
をInteractiveにする
4つ目の要素 
Interaction Controller 
・UIViewControllerInteractiveTransitioningのprotocolを実装したオブジェクト 
! 
・interactive transitioningを簡単に実装できる 
 UIPercentDrivenInteractiveTransitionが用意されている。 
! 
・アニメーションのタイムラインがあるとして、そのタイムライン上のどこの位置 
 にいるかを管理する。また、ユーザの入力によってpercentCompleteプロパ 
 ティを変えることでアニメーションを再生したり巻き戻したりできる。
実装の流れ 
1. ユーザの入力(ジェスチャー)を検知 
! 
2. transitionを開始 
! 
3. animationControllerをnavigationControllerのdelegateに返す 
! 
4. interactionControllerをnavigationControllerのdelegateに返す 
! 
5. ユーザの入力からinteractionControllerの状態をアップデートする 
! 
6. ユーザの入力が終わったらinteraction Controllerにtransitionを 
cancelするかfinishするか伝える
1. ユーザの入力(ジェスチャー)を検知 
・transitionControllerでユーザ入力を検知するように 
 panGestureRecognizerを作る。 
! 
・そのpanGestureを対象のviewControllerに貼る
2. transitionを開始 
・panGestureのUIGestureRecognizerStateがBegan 
に変わったらtransition(popViewControllerまたは 
pushViewController)を開始する
3. animationControllerをnavigationControllerの 
delegateに返す 
・transitionが開始するとnavigationControllerのdelegateメ 
ソッドであるanimationControllerForOperationが呼ばれるの 
でanimationControllerを返す
4. interactionControllerをnavigationControllerの 
delegateに返す 
・animationControllerForOperationが呼ばれたあとすぐに 
interactionControllerForAnimationControllerが呼ばれるので 
interactionControllerを返す。
5. ユーザの入力からinteractionControllerの状態を 
アップデートする 
・animationControllerのanimateTransitionメソッドがanimationのタイムラ 
 インを作ってくれる。そのタイムライン上のどこにいるかを判断するために 
 interactionControllerのupdateInteractiveTransitionメソッドを呼ぶ。 
・panGestureのstateがChangeに変わったらジェスチャーの移動距離から 
 percentを計算してupdateInteractiveTransitionメソッドに引数として 
 percentを渡してpercentCompletedプロパティをアップデートする。 
・ジェスチャーが続いてる間常にアップデートするようにする
6. ユーザの入力が終わったらinteraction Controllerに 
transitionをcancelするかfinishするか伝える 
・panGestureのstateがCancelled、Failed、またはFinished 
になったことでジェスチャーが終了したことを検知する 
・ジェスチャーが終了したらユーザがtransitionをキャンセルし 
たかったのか完了したかったのかを判断して 
interactionControllerのcancelInteractiveTransitionまたは 
finishInteractiveTransitionメソッドを呼んでtransitionを完了 
させる。
複数のgesture 
recognizerを制御する
SioriではひとつのviewControllerに複数の 
gesture recognizerが混在してる。 
Pop Push Scroll 
Swipe
どうやって制御しているか? 
・transitionがstartするかしないかはviewControllerで判断する 
・interactionControllerからviewControllerにdelegateを貼る 
・interactiveTransitionCanStart, interactiveTransitionShouldCancel, 
 interactiveTransitionShouldFinishなどのdelegateメソッド用意して 
 viewControllerでそれぞれのinteractionControllerのメソッドを制御する。 
! 
・UIGestureRecognizerDelegateを利用する 
・shouldRecognizeSimultaneouslyWithGestureRecognizerや    
 gestureRecognizerShouldBeginをうまく利用する。 
・たとえばpopするviewがない時はpopのinteractionControllerのgestureの 
 gestureRecognizerShouldBeginでfalseを返してそもそも反応しないようにする。 
! 
・viewControllerでisTransitioningプロパティを作ってtransition中かどうかの 
 フラグを立てる 
・transitioning中であればscrollViewのscrollはしないようにするなど。
やってみて思ったこと 
・iOS7から公開されたAPIなのでまだまだ情報が少ない 
・ベストプラクティスがわからない。interactive transitionが複数に 
 なると途端に複雑になる。どこにbugがあるかわかりにくい。 
! 
・transitionをキャンセルしてそのままscrollに入るようにするとか、 
 animationをスムースに切り替えるのに苦労した 
! 
・他がやってない分やったら目立つかも
デザイナー募集してます! 
https://www.wantedly.com/projects/10775 
エンジニアも募集してます! 
https://www.wantedly.com/projects/7755

More Related Content

What's hot

Xamarin.forms+azureで始めるモバイル開発
Xamarin.forms+azureで始めるモバイル開発Xamarin.forms+azureで始めるモバイル開発
Xamarin.forms+azureで始めるモバイル開発Tsukasa Kato
 
UX設計の第一歩-インテリジェントネット社内勉強会
UX設計の第一歩-インテリジェントネット社内勉強会UX設計の第一歩-インテリジェントネット社内勉強会
UX設計の第一歩-インテリジェントネット社内勉強会INI株式会社
 
Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)拓将 平林
 
UXデザインの前にすること - UX CatchUp
UXデザインの前にすること - UX CatchUpUXデザインの前にすること - UX CatchUp
UXデザインの前にすること - UX CatchUpKazuki Yamashita
 
アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発Daisuke Tsutsumi
 
[UX]は投げ捨てろ!
[UX]は投げ捨てろ![UX]は投げ捨てろ!
[UX]は投げ捨てろ!c-mitsuba
 
Using App Center Auth & Data
Using App Center Auth & DataUsing App Center Auth & Data
Using App Center Auth & DataSatoru Fujimori
 
アプリUI勉強会 in ネットイヤーグループ
アプリUI勉強会 in ネットイヤーグループアプリUI勉強会 in ネットイヤーグループ
アプリUI勉強会 in ネットイヤーグループKenichi Suzuki
 
UXとUXD~長期的ユーザビリティをどう作りどう測るか?
UXとUXD~長期的ユーザビリティをどう作りどう測るか?UXとUXD~長期的ユーザビリティをどう作りどう測るか?
UXとUXD~長期的ユーザビリティをどう作りどう測るか?Masaya Ando
 
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみたCordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみたShin Ogata
 

What's hot (13)

Xamarin.forms+azureで始めるモバイル開発
Xamarin.forms+azureで始めるモバイル開発Xamarin.forms+azureで始めるモバイル開発
Xamarin.forms+azureで始めるモバイル開発
 
UX設計の第一歩-インテリジェントネット社内勉強会
UX設計の第一歩-インテリジェントネット社内勉強会UX設計の第一歩-インテリジェントネット社内勉強会
UX設計の第一歩-インテリジェントネット社内勉強会
 
Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)
 
UXデザインの前にすること - UX CatchUp
UXデザインの前にすること - UX CatchUpUXデザインの前にすること - UX CatchUp
UXデザインの前にすること - UX CatchUp
 
Onsen UIが目指すもの
Onsen UIが目指すものOnsen UIが目指すもの
Onsen UIが目指すもの
 
アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発
 
[UX]は投げ捨てろ!
[UX]は投げ捨てろ![UX]は投げ捨てろ!
[UX]は投げ捨てろ!
 
UX / UIデザインって何?
UX / UIデザインって何?UX / UIデザインって何?
UX / UIデザインって何?
 
Using App Center Auth & Data
Using App Center Auth & DataUsing App Center Auth & Data
Using App Center Auth & Data
 
アプリUI勉強会 in ネットイヤーグループ
アプリUI勉強会 in ネットイヤーグループアプリUI勉強会 in ネットイヤーグループ
アプリUI勉強会 in ネットイヤーグループ
 
UXとUXD~長期的ユーザビリティをどう作りどう測るか?
UXとUXD~長期的ユーザビリティをどう作りどう測るか?UXとUXD~長期的ユーザビリティをどう作りどう測るか?
UXとUXD~長期的ユーザビリティをどう作りどう測るか?
 
UXとブランド
UXとブランドUXとブランド
UXとブランド
 
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみたCordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
 

Similar to SioriでどのようにCustom Transitionを実装しているのか

スマートフォンサイト構成書作成 超入門編
スマートフォンサイト構成書作成 超入門編スマートフォンサイト構成書作成 超入門編
スマートフォンサイト構成書作成 超入門編Satomi ENOMOTO
 
誰のためのUI? - モノづくりのゴールを実現するフレームワーク -
誰のためのUI?  - モノづくりのゴールを実現するフレームワーク -誰のためのUI?  - モノづくりのゴールを実現するフレームワーク -
誰のためのUI? - モノづくりのゴールを実現するフレームワーク -Mikihiro Fujii
 
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX! UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX! Akiko Ohtsuka
 
Schoo講演資料130409
Schoo講演資料130409Schoo講演資料130409
Schoo講演資料130409schoowebcampus
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewRakuten Group, Inc.
 
なぜUXをデザインしているのか
なぜUXをデザインしているのかなぜUXをデザインしているのか
なぜUXをデザインしているのかMikihiro Fujii
 
ユーザー体験設計を軸にすすめるサービスデザイン
ユーザー体験設計を軸にすすめるサービスデザインユーザー体験設計を軸にすすめるサービスデザイン
ユーザー体験設計を軸にすすめるサービスデザインNoriteru Ino
 
DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃Teruo Adachi
 
The Way of the (Co-)Prototyping チームでUser Interfaceをプロトタイピングする
The Way of the (Co-)Prototyping チームでUser InterfaceをプロトタイピングするThe Way of the (Co-)Prototyping チームでUser Interfaceをプロトタイピングする
The Way of the (Co-)Prototyping チームでUser InterfaceをプロトタイピングするMikihiro Fujii
 
EMS勉強会producedbyすかんく (20211022) おまけ
EMS勉強会producedbyすかんく (20211022) おまけEMS勉強会producedbyすかんく (20211022) おまけ
EMS勉強会producedbyすかんく (20211022) おまけKenta Osuka
 
Schoo講演資料130409
Schoo講演資料130409Schoo講演資料130409
Schoo講演資料130409schoowebcampus
 
コントロールベンダー視点での Command line interface (CLI)
コントロールベンダー視点での Command line interface (CLI)コントロールベンダー視点での Command line interface (CLI)
コントロールベンダー視点での Command line interface (CLI)Daizen Ikehara
 
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザインNaoki Aoyama
 
だから、Webディレクターはやめられない Z
だから、Webディレクターはやめられない Zだから、Webディレクターはやめられない Z
だから、Webディレクターはやめられない ZYasufumi Nishiyama
 
ユーザーの心に刺ささるためには - UX実践編 -
ユーザーの心に刺ささるためには - UX実践編 -ユーザーの心に刺ささるためには - UX実践編 -
ユーザーの心に刺ささるためには - UX実践編 -Midori Hirose
 
【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤
【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤
【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤So-hei Hatakeyama
 
Experience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO Jam
Experience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO JamExperience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO Jam
Experience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO JamAkihiko Kodama
 
BPStudy#75 スマートWP 裏側のお話からリーンなアプローチまで
BPStudy#75 スマートWP 裏側のお話からリーンなアプローチまでBPStudy#75 スマートWP 裏側のお話からリーンなアプローチまで
BPStudy#75 スマートWP 裏側のお話からリーンなアプローチまでHiro Fukami
 

Similar to SioriでどのようにCustom Transitionを実装しているのか (20)

スマートフォンサイト構成書作成 超入門編
スマートフォンサイト構成書作成 超入門編スマートフォンサイト構成書作成 超入門編
スマートフォンサイト構成書作成 超入門編
 
誰のためのUI? - モノづくりのゴールを実現するフレームワーク -
誰のためのUI?  - モノづくりのゴールを実現するフレームワーク -誰のためのUI?  - モノづくりのゴールを実現するフレームワーク -
誰のためのUI? - モノづくりのゴールを実現するフレームワーク -
 
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX! UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
 
Schoo講演資料130409
Schoo講演資料130409Schoo講演資料130409
Schoo講演資料130409
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
 
なぜUXをデザインしているのか
なぜUXをデザインしているのかなぜUXをデザインしているのか
なぜUXをデザインしているのか
 
ユーザー体験設計を軸にすすめるサービスデザイン
ユーザー体験設計を軸にすすめるサービスデザインユーザー体験設計を軸にすすめるサービスデザイン
ユーザー体験設計を軸にすすめるサービスデザイン
 
DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃
 
The Way of the (Co-)Prototyping チームでUser Interfaceをプロトタイピングする
The Way of the (Co-)Prototyping チームでUser InterfaceをプロトタイピングするThe Way of the (Co-)Prototyping チームでUser Interfaceをプロトタイピングする
The Way of the (Co-)Prototyping チームでUser Interfaceをプロトタイピングする
 
EMS勉強会producedbyすかんく (20211022) おまけ
EMS勉強会producedbyすかんく (20211022) おまけEMS勉強会producedbyすかんく (20211022) おまけ
EMS勉強会producedbyすかんく (20211022) おまけ
 
Schoo講演資料130409
Schoo講演資料130409Schoo講演資料130409
Schoo講演資料130409
 
Schoo講演資料130409
Schoo講演資料130409Schoo講演資料130409
Schoo講演資料130409
 
コントロールベンダー視点での Command line interface (CLI)
コントロールベンダー視点での Command line interface (CLI)コントロールベンダー視点での Command line interface (CLI)
コントロールベンダー視点での Command line interface (CLI)
 
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン
 
だから、Webディレクターはやめられない Z
だから、Webディレクターはやめられない Zだから、Webディレクターはやめられない Z
だから、Webディレクターはやめられない Z
 
ユーザーの心に刺ささるためには - UX実践編 -
ユーザーの心に刺ささるためには - UX実践編 -ユーザーの心に刺ささるためには - UX実践編 -
ユーザーの心に刺ささるためには - UX実践編 -
 
【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤
【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤
【試⾏錯誤】スマホデザインプロセス のHoloLensへの適⽤
 
Indigo Studio で作るプロトタイプ
Indigo Studio で作るプロトタイプIndigo Studio で作るプロトタイプ
Indigo Studio で作るプロトタイプ
 
Experience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO Jam
Experience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO JamExperience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO Jam
Experience Design Out of Screen:これからのエクスペリエンスデザイナーの生きる道@UX TOKYO Jam
 
BPStudy#75 スマートWP 裏側のお話からリーンなアプローチまで
BPStudy#75 スマートWP 裏側のお話からリーンなアプローチまでBPStudy#75 スマートWP 裏側のお話からリーンなアプローチまで
BPStudy#75 スマートWP 裏側のお話からリーンなアプローチまで
 

SioriでどのようにCustom Transitionを実装しているのか