SlideShare a Scribd company logo
1 of 17
Download to read offline
UI実装であると嬉しいレシピブック	まかない編

ダイジェスト紹介と複雑なUI実装への考察
Swift愛好会	#50	@	オンライン(Cluster)
2020/04/28
Fumiya	Sakai
自己紹介
・Fumiya	Sakai
・Freelance	iOS	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	~	Now
iOSのUI実装本を執筆しています!(新刊構想中…)
少しの工夫で実現できるTIPS集 ライブラリ表現の活用集
書籍に掲載したサンプルのバージョンアップや続編等に現在着手中です。
技術書典8(応援祭)で電子版だけ頒布した書籍紹介
前回及び前々回に頒布したものの中で書籍に載せきれなかったものを紹介
第1章: メディアアプリ型のUI
第2章: 構造が複雑な写真表示UI
記事一覧を無限スクロールする様な形のアプリ
UIを一覧/詳細表示を簡素化した実装を紹介。
現在はBoothにて販売中です! https://booth.pm/ja/items/1835468
¥1,000	-	iOSアプリ開発「UI実装であると嬉しいレシピブック	まかない編」
サンプルコードはこちら:	https://github.com/fumiyasac/meals_ios_ui_recipe_showcase
第3章: Combine + UICollectionViewCompositionalLayout
タイル状のフォトギャラリーや一覧表示型のア
プリUIでライブラリを活用した実装を紹介。
実務でも利用&考察したもの
特に第1章と第2章の内容に関し
ては、実際に相談されたり、実
装アイデアとして活用する機会
があったものになります。
第1章部分のダイジェスト紹介
UIPageViewControllerでの無限スクロールやプロフィール画面でのUI実装
UIPageViewControllerを利用した無限循環型の切り替え処理
プロフィール画面のように1つの画面内に多くの要素がある場合
UIPageViewControllerDelegate/UIPageViewControllerDataSource

を利用して切り替えるタイミングを適切にコントロールする必要が
ある点に難しさがある。

(これに加えて上タブの部分の動きとも連動させる場合には、更に
両方の状態についての配慮が加わるのでさらに難易度が上がる)
1つの画面の中に、

・ヘッダー画像の伸縮パララックス表現

・表示内容のタブ切り替え対応

・スクロールに応じた画面状態のハンドリング処理

を組み合わせた形を実現するためのアプローチを考察する
UIPageViewControllerでの無限スクロール部分概要
UIPageViewControllerとタイトル用View要素の動きを合わせる
タイトル表示部分
一覧画面要素を
表示するための
ContainerView
コンテンツ表示部分
親となる画面
MainViewController
進む・戻るボタンを押下時の画面処理
はView要素内のDelegateで橋渡し
写真一覧画面を
6個分配置する
・UIPageViewControllerDatasource 写真一覧画面用
ViewController
・UIPageViewControllerDelegate
表示している画面のインデックス値を
調節することで実現できる
画面の切り替わり処理が完了したタイ
ミングで画面状態を変更する
UIScrollViewベースの画面における各View要素の配置
縦方向のスクロール量の影響を受けるものはUIScrollViewの外側に配置
(1) DetailHeaderView
(2) DetailSwitchButtonsView
(3) SemiModalButton
→ サムネイル写真表示
→ 切り替えボタン
→ セミモーダル表示
UITableViewの処理については配置した
ViewController内で実施し画面を分割しない
UIStackViewで横並びの設定
概要表示用
UITableView
この様な構造の場合には、画面に関
係しうる要素の配置方法がポイント
コメント表示用
UITableView
UIScrollViewの内部 UIScrollViewの外部
UIScrollView内部に配置したUITableViewの位置調整
UIScrollViewのスクロール量とUITableViewのスクロール量を調節する
② ヘッダー画像非表示① ヘッダー画像表示中
(1) 構造に関するポイント
スクロールの応じてサムネイル画像表示のView要素に付与した上方向の制約を更新し
て動きを出す。
(2) contentOffset.yのハンドリング
scrollViewDidScrollを利用することで各種構造に関わるView要素のAutoLayout制
約を更新する点がこの画面で大事な点。
スクロール時に2つのUITableViewの上方向(Y軸方向)の位置はそれぞれ違う!
(3) 中のUITableViewの位置合わせ
UIScrollViewの内部にこの2つのUITableViewがある構造にも注意が必要な部分。
スクロール時に2つのUITableViewの位置は同調して動いている形にする!
UIScrollViewDelegateのscrollViewDidScrollを利用した位置調整
第2章部分のダイジェスト紹介
複雑なタイル状のレイアウト実装やWebサイトでも良く見る表現をするUI実装
UICollectionViewのレイアウトで難易度が高い部分
局所的な部分であってもそのまま実装するのが難しい場所について
UICollectionViewを利用したレイアウトを考える上で難しい部分で
もある段違いのタイル状に写真を見せる部分をライブラリでの実装
を活用して実現する方法を解説しています。表現的な部分で難しそ
うな部分に対して上手にライブラリを活用した形の事例を解説して
います。
Webやスマートフォン対応サイトでもよく見かける

・長い文章の折り畳みできるようにする表現

・タグクラウドの様にバラバラの文字数を左寄せにする表現

についても、頑張れば純正のUI要素で実現できうる部分であっても
ライブラリを活用して簡単に実現できるものを紹介しています。
利用しているライブラリの紹介
他にも利用していそうに見えるけど利用しているのは実はこの6つ
https://github.com/ElaWorkshop/TagListView
https://github.com/zenangst/Blueprints
⭐ 	AnimatedCollectionViewLayout:
https://github.com/KelvinJin/AnimatedCollectionViewLayout
⭐ 	Blueprints:
	
⭐ 	Nantes:
https://github.com/instacart/Nantes
⭐ 	TagListView:
https://github.com/hussc/PTCardTabBar
⭐ 	PTCardTabBar:
https://github.com/rechsteiner/Parchment
⭐ 	Parchment:
選定にあたって心がけた部分
・ライブラリの利用しやすさ
・ライブラリ内サンプルの充実度合い
・機能が多すぎない	or	少なすぎない
・Storyboard	/	Xibとの相性の良さ
・更新及び運用保守
セルをContainerViewとして扱う
UICollectionView	in	UICollectionViewCellの様な形式にするのがポイント
フォトギャラリー画面土台となる画面
UICollectionViewCellに
別のUICollectionViewの
画面を表示する
Storyboardでの画面構造の組み立て方
2つの異なるライブラリを組み合わせて表現する
UICollectionViewLayoutのカスタマイズだけではどちらも難しい表現
(1) 縦に同じ比率
(2) 比率維持&横並び
Blueprints AnimatedCollectionViewLayout
奥行きを伴う回転アニメーション表現
その他ライブラリを利用した実装をしている部分
タブ型UIの部分は全体的に利用し、その他は機能を補う方針にしている。
Nantes	&	TagListView
第1章で解説したような無限スクロール型の
UI実装が割と手軽な形で実現可能!
Parchmentを利用したタブ型UIの実装
READMEやライブラリ内サンプルを参考
にすると更に理解できると思います。
第3章部分のダイジェスト紹介
UICollectionViewCompositionalLayout	&	Combineで実装を置き換える
元になった実装は以前に愛好会でも発表した内容です
Qiita記事:	https://bit.ly/3cQt8nk
過去登壇資料:	https://bit.ly/3cQt8nk
まとめ
実務の中でも要望が上がりやすい形のUI実装を通じて気づいた事が多かった。
1. 実現したい画面におけるView構造や階層を意識する:
一見するとシンプルに見える感じを受けるような画面でも、その内側では複雑な実装をしている場合がある。

特に「画面内の要素としてまとめるか?」or「View要素クラスとして分離するか?」の選択が難しい部分でもある。
2. 仕様全体をロックインする形よりも、局所的な利用を心がけたライブラリの活用:
UI実装系のライブラリを活用すると、便利で工数短縮も見込める反面仕様全体がロックインされる場合がある。

なるべくライブラリが影響する範囲を限定させながら、UI要素内に組み込んでデザインと合わせるようにすると良さそう。
まだまだ社会的に大変な時期ではありますが、僕自身もこれ以降の新しい取り組みができるようにしていく次第です。
3. 既にiOSアプリであるUIから実装を紐解いてエッセンスを自分のアプリと融合させる面白さ:
既にあるUI実装事例を導入する段階で、様々な観点から現在の仕様を理解していないとブレてしまう場合がある。

アプリのデザインに「そぐう形」を見つけて機能と体感を調和させる形を見つけるのが醍醐味であると感じる。
おまけ
なぜ自分が書籍という部分に行き着いたのか?という部分をお話しています。
実際のスケジュール感・図解やサンプルコードの作り方・書籍執筆に込めた想いなんかを雑ではありますが話しています。
https://www.youtube.com/watch?v=pjLG5bd4KPU
Thank	you	for	listening	!

More Related Content

More from Fumiya Sakai

最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返りFumiya Sakai
 
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返りFumiya Sakai
 
少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発Fumiya Sakai
 
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するUIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するFumiya Sakai
 
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞくレイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞくFumiya Sakai
 
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分についてiOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分についてFumiya Sakai
 
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & CombineFumiya Sakai
 
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略Fumiya Sakai
 
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考えるFumiya Sakai
 
アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集Fumiya Sakai
 
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介Fumiya Sakai
 
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装Fumiya Sakai
 
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介Fumiya Sakai
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるFumiya Sakai
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方Fumiya Sakai
 
Approach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSApproach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSFumiya Sakai
 
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Fumiya Sakai
 
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.Fumiya Sakai
 
メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察Fumiya Sakai
 
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップRxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップFumiya Sakai
 

More from Fumiya Sakai (20)

最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り
 
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
 
少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発
 
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するUIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
 
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞくレイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
 
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分についてiOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
 
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
 
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
 
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
 
アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集
 
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
 
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
 
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
 
Approach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSApproach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOS
 
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
 
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.
 
メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察
 
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップRxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップ
 

UI実装であると嬉しいレシピブック まかない編 ダイジェスト紹介と複雑なUI実装への考察