SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
メディアアプリでよく見る

無限スクロールするタブの動きへの考察
Fumiya	Sakai	(Just1factory)
2018/12/21	ROPPONGI.swift	第6回	望年会	@	Visits	Technology	Inc.
自己紹介
・Fumiya	Sakai
・Mobile	App	Engineer
アカウント:
・Twitter:	https://twitter.com/fumiyasac

・Facebook:	https://www.facebook.com/fumiya.sakai.37

・Github:	https://github.com/fumiyasac	

・Qiita:	https://qiita.com/fumiyasac@github
発表者:
・Born	on	September	21,	1984
これまでの歩み:
Web	Designer
2008	~	2010
Web	Engineer
2012	~	2016
App	Engineer
2017	~	Present
ほんの少しだけ告知と宣伝
「少しの工夫とアイデアでできる表現集」として、これまでサンプル開発や実務の
中で培ったノウハウ等から、UI実装いくつかのまとまったサンプル実装を例にUI構
築をする上で重要な実装ポイントやアイデアを紹介していく形式にしてみました。
収録サンプル:
https://github.com/fumiyasac/ios_ui_recipe_showcase
現在Boothにて販売中です(近日アップデート予定)	¥1,000
同人誌「iOSアプリ開発	UI実装であると嬉しいレシピブック」を書きました。
https://booth.pm/ja/items/1021745
概要:
今回取り組む事になったきっかけ
これまでもメディアアプリの事例を元にした記事を書いたのでもう一個。
以前にも公開している記事:
メディア系アプリでよくあるUIを実現した簡易サンプル

https://qiita.com/fumiyasac@github/items/2490990be4c011935368

iPhoneアプリでUIを作るためのTipsとContainerView・UIPageViewControllerを使ったサンプル紹介

https://qiita.com/fumiyasac@github/items/1244abc8e3286c47ef50
素晴らしいライブラリもたくさんある中でも、あえてDIYすることで実装時のポイントが見えてくる
実際にアプリで導入されている事例に踏み込む:
この記事は活用をするにあたって絶対に押さえておくべき部分の第1歩の部分
画面の動きに関するデモ動画をご一緒に!
今回の発表でのサンプルコード
実際に動かせるコードもご用意しました	&	解説コメントも残しました。
https://github.com/fumiyasac/ScrollAnimationShowcase
Storyboardの構成
タブ表示部分とコンテンツ表示部分をContainerViewに分割しています。	
タブ用のUICollectionView
ContainerViewに
UIPageViewController
を接続しておく
コンテンツ表示用に
使い回す用のViewControllerContainerViewを
2つ配置する
無限スクロールを伴うタブ型UI実装をするために	(1)
UICollectionViewFlowLayoutクラスを継承したクラスを別途作成する。
無限スクロールを伴うタブ型UI実装をするために	(2)
① 配置しているUICollectionViewの情報を取得
② 現在配置情報を元にセル位置の調整をする
このコードでは最終的に停止する位置を変更している
無限スクロールを伴うタブ型UI実装をするために	(3)
UICollectionViewCellのIndex値を無限スクロールに対応できる様に調整する。
無限スクロールを伴うタブ型UI実装をするために	(4)
① 実際のセル配置個数をインデックス値を元にした調整
② セル配置位置に関する調整
動作調整をするために実際の個数よりも多く配置する必要があるの
でインデックス値が不整合を生じないように配慮する。

またタブの数が変化した際に崩れたりしないように注意する。
こちらもUICollectionViewの現在オフセット値の調節
のために別途配慮する
無限スクロールを伴うタブ型UI実装をするために	(5)
① UIPageViewControllerの動作との整合を保つ
UIPageViewControllerに配置しているものについても
別途Index値を持っているため、タブ型表示をしている
UICollectionViewのIndex値との整合を保つ必要がある。
② UIPageViewControllerへ何を伝えるか
必要な値:

・UIPageViewControllerを動かす方向

・UIPageViewControllerに表示するもののIndex値
無限スクロールを伴うタブ型UI実装をするために	(6)
① タブのスクロールが自然に停止した際の考慮
自然に停止する際には真ん中を基準として一番近くにあ
るセルの内容に合わせる配慮が必要になる。
② 処理をつなげるためのProtocol
UIPageViewController側に仕込んだ表示に関
する変化処理と結合して役割を明確にする。
無限スクロールを伴うタブ型UI実装をするために	(まとめ)
ProtocolやContainerViewの親子関係を上手に活用することで実現する。	
ArticleViewController CategoryScrollTabViewController
CategoryScrollContentsViewController
(UIPageViewController)
�※表示したいカテゴリーの個数分配置する
無限カルーセル表示処理に関する考慮
UIPageViewControllerDelegate:
UIPageViewControllerDataSource:
スワイプ切り替え完了時にタブ側を更新
UICollectionViewDataSource:
セルタップ時に表示を更新する
UIScrollViewDelegate:
スクロール自然停止時に表示を更新する
�※別途CategoryScrollTabDelegate定義
タブ側の状態変化をArticleViewControllerへ
伝えることでタブとコンテンツ表示を合わせる。
このサンプルUIで加えたほんの少しの工夫例	(1)
・選択しているFont Family & Font Sizeを考慮
・現在表示している文字列の長さを取得する
止まったタブ位置の文字長さに合わせて下線の長さが変化する表現。
あとはこのメソッドを然るべき時に実行する形
このサンプルUIで加えたほんの少しの工夫例	(2)
選択されたよ!ということをユーザーに伝えるためのHaptic	Feedbackを追加。
短く「コツッ!」としたフィードバックを与える一例:
まずはUIImpactFeedBackGeneratorのインスタンスを作成
然るべきタイミングでimpactOccurred()を実行させる
UIPageViewControllerのスワイプ移動完了/	タブ型UIのスクロール停止	/	タブ型UIのセルタップ
今回の部分で端末のフィードバックを伴う部分:
このサンプルを実現するために参考資料	(1)
UICollectionView関連のTIPSについては今も相変わらずよく見ています。
UICollectionViewLayoutを利用するための参考リンク集:
【Swift】UICollectionViewLayoutの使い方。コレクションビューのセルの配置をカスタマイズする。

https://hajihaji-lemon.com/smartphone/swift/uicollectionviewlayout/
UICollectionViewのLayoutで悩んだら

https://techlife.cookpad.com/entry/2017/06/29/190000
UICollectionViewFlowLayoutでセルの大きさやセル同士の間隔などを設定する

https://qiita.com/takehilo/items/d0e56f88a42fb8ed1185
こちらは今回の事例に限らずともUICollectionViewを利用したUI構築の際には一読すると良いかと思います。
なかなかドキュメントだけではピンと来にくい部分:
このサンプルを実現するために参考資料	(2)
無限スクロールを実現する際にはUIScrollViewDelegateの活用がポイント。
UICollectionViewやUIScrollViewを利用した無限スクロールの実装例:
UIPageViewControllerをつかって無限スクロールできるタブUIを実装してOSSとして公開しました

https://techblog.zozo.com/entry/tab_page_viewcontroller
【Swift4】UICollectionViewを使ってカルーセルを実装してみた。【セルの装飾編】

https://uruly.xyz/carousel-infinite-scroll-4/
infinite-uicollectionview【※Github	Repository】

https://github.com/masoapps/infinite-uicollectionview
Infinite-Scrollview【※Github	Repository】

https://github.com/duckien219/Infinite-Scrollview
今回の発表内容の補足と詳細
本日お話した内容に関しては下記の記事にもまとめております。
https://qiita.com/fumiyasac@github/items/af4fed8ea4d0b94e6bc4
今回のまとめ
大雑把な動きから細かな調整や汎用化までの過程が勉強になった!
Step1)	基本の確認とベース挙動の実現
まずは必要そうなものをピックアップ

・UIPageViewController

・ContainerView

・UICollectionView
このサンプル開発を通じて:	
ライブラリを使用せずに類似の動きを自分で実装をすることで「どのProtocolを知った上での活用が必要か?」
「調整ないしは汎用化を考えて行く際に考慮すべき点はどこか?」「処理や実装に加えてUI/UX部分でもさらに
考慮できる点はどこか?」の観点が理解できるようになる。UI表現を提案する際の手札が増える!
Step2)	さらにUXへのこだわりや汎用化
実現できることから1つ上のステージへ

・Customization	of	tab	count	&	size

・Animation

・Haptic	Feedback
Thank	you	for	listening	!

Mais conteúdo relacionado

Mais procurados

動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
 
【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料
AAsolution
 

Mais procurados (20)

まずはできるところから始める UnitTestとテストができる実装について
まずはできるところから始める UnitTestとテストができる実装についてまずはできるところから始める UnitTestとテストができる実装について
まずはできるところから始める UnitTestとテストができる実装について
 
デザイナーとエンジニアが話す、iOSアプリケーション開発
デザイナーとエンジニアが話す、iOSアプリケーション開発デザイナーとエンジニアが話す、iOSアプリケーション開発
デザイナーとエンジニアが話す、iOSアプリケーション開発
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
 
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン
 
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
 
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
 
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分についてiOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
 
2022年の抱負とここ数年続けてきたインプット
2022年の抱負とここ数年続けてきたインプット2022年の抱負とここ数年続けてきたインプット
2022年の抱負とここ数年続けてきたインプット
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめできるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
 
少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発
 
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞくレイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
 
楽しいものづくり ファーストステップ
楽しいものづくり ファーストステップ楽しいものづくり ファーストステップ
楽しいものづくり ファーストステップ
 
UIを作る際にライブラリにする?それともDIYする?の切り分け&実装のアイデア例と事例紹介
UIを作る際にライブラリにする?それともDIYする?の切り分け&実装のアイデア例と事例紹介UIを作る際にライブラリにする?それともDIYする?の切り分け&実装のアイデア例と事例紹介
UIを作る際にライブラリにする?それともDIYする?の切り分け&実装のアイデア例と事例紹介
 
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップRxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップ
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
 
【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料
 
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
 
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリAngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
 
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-EdoiOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
 

Semelhante a メディアアプリでよく見る無限スクロールするタブの動きへの考察

Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
theguild
 
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
Satoru Yamaguchi
 
Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発
Masakazu Muraoka
 

Semelhante a メディアアプリでよく見る無限スクロールするタブの動きへの考察 (20)

iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントiOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
 
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
 
最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り
 
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
 
UIを作る際にライブラリにする? それともDIYする?の切り分け(僕の見解)
UIを作る際にライブラリにする? それともDIYする?の切り分け(僕の見解)UIを作る際にライブラリにする? それともDIYする?の切り分け(僕の見解)
UIを作る際にライブラリにする? それともDIYする?の切り分け(僕の見解)
 
あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)
 
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
 
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
Pixateワークショップ―アプリケーションの概要とpixateの使い方 初級編―.pdf
 
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみるWeb屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
 
20220716_jsfes.pdf
20220716_jsfes.pdf20220716_jsfes.pdf
20220716_jsfes.pdf
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
 
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
 
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
 
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
モバイル対応Ui部品を利用したレスポンシブwebアプリ開発
 
Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発
 
福井で「しあわせデザイナー」になるために
福井で「しあわせデザイナー」になるために福井で「しあわせデザイナー」になるために
福井で「しあわせデザイナー」になるために
 
Yapc::Asia 2013
Yapc::Asia 2013Yapc::Asia 2013
Yapc::Asia 2013
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
Clean Architecture用の開発ツールを作ったお話
Clean Architecture用の開発ツールを作ったお話Clean Architecture用の開発ツールを作ったお話
Clean Architecture用の開発ツールを作ったお話
 

Mais de Fumiya Sakai

既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
Fumiya Sakai
 

Mais de Fumiya Sakai (10)

RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために
 
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwiftMeasures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
 
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
 
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
 
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するUIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
 
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
 
Hint of a little ingenuity about UI.
Hint of a little ingenuity about UI.Hint of a little ingenuity about UI.
Hint of a little ingenuity about UI.
 
書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
 

メディアアプリでよく見る無限スクロールするタブの動きへの考察