SlideShare a Scribd company logo
1 of 28
Download to read offline
UIKitやSwiftUIで

表現や動きが特徴的なUI実装事例を考察する
potatotips	#71	@	オンライン
2020/10/23
Fumiya	Sakai
自己紹介
・Fumiya	Sakai
・Freelance	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	~	Now
iOSのUI実装本を執筆しています!
少しの工夫で実現できるTIPS集 ライブラリ表現の活用集
書籍に掲載したサンプルのバージョンアップや続編等に現在着手中です。
過去に技術書典8で電子版だけ頒布した過去作
Vol.1及びVol.2に頒布したものの中で書籍に載せきれなかったものを紹介
第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章の内容に関し
ては、実際に相談されたり、実
装アイデアとして活用する機会
があったものになります。
	全てUIKitを利用
新たに技術書典9で電子版だけ頒布した書籍紹介
表現や動きが特徴的でユーザーにもほんの少し遊び心を与える様なUI実装を紹介
現在はBoothにて販売中です! https://booth.pm/ja/items/2360379
¥1,000	-	iOSアプリ開発「UI実装であると嬉しいレシピブック	おもしろ編」
サンプルコード:	https://github.com/fumiyasac/meals_2nd_ios_ui_recipe_showcase
実務導入前の検証段階
若干一癖がありそう、ぱっと見
だと実装の方針が立ちにくい感
じに見受けられそうなUI実装や
構造に関して考察しました。
	UIKit	&	SwiftUIを利用
第1章:	面白い表現のフォトギャラリーUI	
第2章:	画面ロック機能を利用したUI
UICollectionViewを活用したユニークなレイア
ウト表現と画面遷移カスタマイズ実装を紹介。
第3章:	SwiftUI	+	OSS	Libraryの活用
SceneDelegateの機能や端末認証を利用した画
面ロック機能を盛り込んだ実装を紹介。
面白い表現のフォトギャラリーUI実装の概要紹介
UICollectionViewを利用したユニークな表現とカスタムトランジション
UICollectionViewのレイアウト属性を利用した表現
指の動きに連動する形のカスタムトランジション
-	UINavigationControllerでの画面遷移処理に関するカスタマイズ

-	UIPanGestureRecognizerを利用したインタラクティブな戻る遷移
参考:	UICollectionViewのLayoutで悩んだら

https://techlife.cookpad.com/entry/2017/06/29/190000
-	縦横同時スクロールを可能にする一覧表示

-	Safari風なタブが重なる一覧表示とアニメーション表現 

-	UICollectionViewLayout	or	UICollectionViewを継承

※	他にはUICollectionViewDelegateFlowLayoutもある

※	UICollectionViewCompositionalLayoutは未使用
UICollectionViewのレイアウトをカスタマイズする
UICollectionViewのレイアウトクラスを継承することで様々な表現が可能
row:横	/	Section:縦に並べて表現 	2つ状態が異なるレイアウトを適用して表現
・・・Section0
・・・Section1
・・・以降続く
Section2 ・・・
形状の変形はアフィン変換を利用
画面から写真が浮き上がる様な画面遷移の実装(1)
UINavigationControllerと連携するカスタムトランジション
②サムネイル一覧画面①拡大画像表示画像 Push / Popの画面遷移
GalleryNavigationController(UINavigationController)
PhotoDetailTransitionAnimatorDelegate
・アニメーションの開始	/	終了
・UIImageViewのimage	/	サイズ
ここに設定
PhotoDetailPushTransition	/	PhotoDetailPopTransition
・Push	/	Pop時適用アニメーション
UIViewControllerAnimatedTransitioning
画面から写真が浮き上がる様な画面遷移の実装(2)
UIPanGestureRecognizerと連動したinteractiveなpop遷移との連携処理
②サムネイル一覧画面①拡大画像表示画像 画像を下方向に引っ張る
GalleryNavigationController(UINavigationController)
PhotoDetailTransitionAnimatorDelegate
・アニメーションの開始	/	終了
・UIImageViewのimage	/	サイズ
ここに設定
PhotoDetailInteractiveDismissTransition
・UIPanGestureRecognizer発動時アニメーション
UIViewControllerInteractiveTransitioning
UINavigationControllerDelegateで活用する部分
Modalでのpresent/dismissでのカスタムトランジションと異なる点に注意
//	MEMO:	UINavigationControllerのNavigationスタックに追加または削除する際(Push	or	Pop)の画面切り替え時に適用するアニメーションを定義する

//	→	ここではインタラクティブな制御を伴うアニメーション(ここではUIPanGestureRecognizerを伴って画面の状態が変化しうるアニメーション)を含まないア
ニメーションクラスの適用に関する設定をする

func	navigationController(_	navigationController:	UINavigationController,	animationControllerFor	operation:	UINavigationController.Operation,	from	
fromVC:	UIViewController,	to	toVC:	UIViewController)	->	UIViewControllerAnimatedTransitioning?
//	MEMO:	UINavigationControllerのNavigationスタックに追加または削除する際(Push	or	Pop)の画面切り替え時に適用するアニメーションを定義する

//	→	ここではインタラクティブな制御を伴うアニメーション(ここではUIPanGestureRecognizerを伴って画面の状態が変化しうるアニメーション)を含むアニ
メーションクラスの適用に関する設定をする

func	navigationController(_	navigationController:	UINavigationController,	interactionControllerFor	animationController:	
UIViewControllerAnimatedTransitioning)	->	UIViewControllerInteractiveTransitioning?
//	MEMO:	UINavigationControllerを伴う画面遷移が完了したタイミングで実行される処理

func	navigationController(_	navigationController:	UINavigationController,	didShow	viewController:	UIViewController,	animated:	Bool)
①	Push:進む画面遷移時のカスタムトランジション	/	②	Pop:戻る画面遷移	or	引っ張る動きに合わせたカスタムトランジション
一覧画面から詳細画面へ画面遷移をする場合の例
画面遷移元の情報を画面遷移先に引き渡すことでシームレスな形の表現を実施
//	MEMO:	Pushでの画面遷移時にはPhotoDetailPushTransitionを適用する

if	let	photoDetailVC	=	toVC	as?	PhotoDetailViewController	{

				result	=	PhotoDetailPushTransition(fromDelegate:	fromVC,	toPhotoDetailVC:	photoDetailVC)

}
・画面情報のViewを取得
画面遷移元及び画面遷移先のViewの
情報をContext経由で受け取り利用。

※	画面遷移の部分が担当 遷移開始時にセルは非表示

(戻る時には直る)
・セル内/配置画面の画像を利用
配置したセル	/	画面全体に配置した
画像のサイズと表示内容をプロトコ
ルを利用してアニメーションクラス
へ引き渡す。

※	各表示画面の部分が担当
PhotoDetailTransition
AnimatorDelegate
遷移先&遷移元の情報を渡す
詳細画面から一覧画面へ画面遷移をする場合の例
Dismiss時のアニメーション発火状況に応じて適用するアニメーションを変える
if	let	photoDetailVC	=	fromVC	as?	PhotoDetailViewController	{

//	MEMO:	Pushでの画面遷移時には、PhotoDetailViewControllerに定義したUIPanGestureRecognizerで発動したDismiss時のアニメーション発火状況に応じて変化

//	→	UIPanGestureRecognizerで発動したDismiss時のアニメーション発火状況がtrue:	PhotoDetailInteractiveDismissTransition

//	→	UIPanGestureRecognizerで発動したDismiss時のアニメーション発火状況がfalse:	PhotoDetailPopTransition

				if	photoDetailVC.isInteractivelyDismissing	{

								result	=	PhotoDetailInteractiveDismissTransition(fromDelegate:	photoDetailVC,	toDelegate:	toVC)

				}	else	{

								result	=	PhotoDetailPopTransition(toDelegate:	toVC,	fromPhotoDetailVC:	photoDetailVC)

				}

}
・PhotoDetailPopTransition
一覧画面から詳細画面へ遷移するカ
スタムトランジションとは逆の表現
・指の動きと画面遷移の連動
UIPanGestureRecognizerでの状態を画面遷移クラスに伝えることで
画面遷移の割合を算出し状態をコントロールする点がポイント。
UIViewPropertyAnimator
→	移動量小:画面遷移を中断
→	移動量大:画面遷移を実行
・画面内の画像を利用する
アニメーション実行部分に関しては基本的にPopでのカスタムト
ランジションを実現するコードと類似。
①	指の動きが起点となる
②	Y軸方向の変化量で画面遷移

 	の実行を決定
下に動かす
画面ロック機能を利用したUI実装の概要紹介
SceneDelegateの処理をうまく活用した画面ロック機能と生体認証の活用等
バックグラウンド移行時に画面ロックをかける機能
自作では難しい部分にライブラリを活用したUI実装
-	SceneDelegateのライフサイクル処理を利用した画面ロック

-	TouchID・FaceIDを活用した端末認証でのロック解除機能

-	電卓みたいなボタン入力と使い回しを意識した画面構造

-	触覚フィードバックを利用した視覚と触覚の組み合わせ
-	iOS14未満でもUICollectionViewでスワイプメニューを表示

-	スワイプ処理を考慮した実装しやすいSemiModal利用画面
PanModal:

https://github.com/slackhq/PanModal
SwipeCellKit:

https://github.com/SwipeCellKit/SwipeCellKit
おおまかな画面遷移フローと状態
同じ画面の構成であっても内部ロジックを微妙に変更して利用用途に合わせる
・利用用途が異なる画面だが基本は同じ
同じ画面を機能に合わせて使い回す。

※	画面用途のEnumに合わせた処理
・SceneDelegate.swiftを利用する
アプリ自体のライフサイクルを利用する。

※	AppDelegateでも利用可能
・生体認証(TouchID	/	FaceID)
端末が持っている機能の生体認証でパス
コードロック解除を可能な形にする。
//	新規作成

case	inputForCreate

//	新規作成時確認

case	retryForCreate

//	変更

case	inputForUpdate

//	変更時確認

case	retryForUpdate

//	パスコードロック画面

case	displayPasscodeLockTab画面 入力画面 確認画面 画面ロック
例:	5つの画面状態
ViewControllerでの入力処理と処理の流れ
MVP(Model-View-Presenter)の構成と入力完了時の各種処理の概要
PasscodeViewController
ユーザー入力値の反映
ViewController側での処理との連携
InputPasscodeKeyboardDelegate
・パスコード4桁が入力完了したタイミング
Presenter側へ完了を伝える
presenter.inputCompleted(

				userInputPasscode,	

				inputPasscodeType:	inputPasscodeType

)
・InputPassCodeTypeに応じた処理
case	inputForCreate						//	新規作成

case	retryForCreate						//	新規作成時確認

case	inputForUpdate						//	変更

case	retryForUpdate						//	変更時確認

case	displayPasscodeLock	//	パスコードロック画面
protocol	PasscodePresenterProtocol:	class	{

				func	goNext()

				func	dismissPasscodeLock()

				func	savePasscode()

				func	showError()

}
IuputPasscodeType PasscodePresenterDelegate
PasscodeViewController
PasscodePresenter
PasscodeModel
入力完了時処理
データ登録や

つきあわせ処理
パスコード
情報を返却
各種状態に

応じた処理
パスコードロック機能が実行されるイメージ図解
現在処理中の画面のさらに上に入力用の画面を被せる様にする点がポイント
Modal表示画面
・パスコード解除用の画面をかぶせる処理を実施する2つのタイミング
バックグラウンドに移行しようとする状態から再度フォアグラウンドへ	/	アプリを一旦閉じた状態から再度アプリを起動
PasscodeViewController
TabBarでの表示内容の上に
パスコード画面を被せる
PasscodeViewController
TabBar上に更にModal画面がある場合に
パスコード画面を被せる
MainTabBarController MainTabBarController
アプリ全体のライフサイクル処理を利用した画面ロック
SceneDelegate(AppDelegate)の処理と組み合わせて画面を表示させる
func	sceneDidDisconnect(_	scene:	UIScene)	{

				print("sceneDidDisconnect:	アプリ終了時")

}

func	sceneDidBecomeActive(_	scene:	UIScene)	{

				print("sceneDidBecomeActive:	アプリの状態がアクティブになった時")

}

func	sceneWillResignActive(_	scene:	UIScene)	{

				print("sceneWillResignActive:	フォアグラウンドからバックグラウンドへ移行しようとした時")

				//	パスコードロック画面を表示する

				//	注意点:	他に実装されている処理の関係でsceneWillResignActiveだとうまくいかない場合

				//	→	sceneDidEnterBackgroundに当該処理を移行しても良い

}

func	sceneWillEnterForeground(_	scene:	UIScene)	{

				print("sceneWillEnterForeground:	バックグラウンドからフォアグラウンドへ移行しようとした時")

}

func	sceneDidEnterBackground(_	scene:	UIScene)	{

				print("sceneDidEnterBackground:	バックグラウンドへ移行完了した時")

}
・iOS12以前の場合
SceneDelegateがない場合には実施
している処理をAppDelegateで行う
①	パスコードを設定済み

②	入力画面が表示されていない
→	この条件を満たすと表示される
数値の入力をする部分と状態を表す部分のView要素
現在処理中の画面のさらに上に入力用の画面を被せる様にする点がポイント
入力時アイコンの色変化はアニメーションを伴う

(削除時は逆の色変化&アニメーションなし)
数字入力とアニメーションを上手に共存する

(optionに.allowUserInteractionを忘れずに)
ハートがバウンドして表示される
0〜9のボタンはXcodeの右ペインでtagの値を数字に合わせて設定
※	どのボタンが押されたかを	sender:	からtagの値を取得
4つのUIImageViewにXcodeの右ペインでtagの値を左から1〜4で設定
※	パスコードの長さに応じてtagに対応するUIImageViewが変化
セミモーダルビューで表示している画面の構成
UICollectionViewのレイアウト表現とUIライブラリを組み合わせた表現
・レイアウトクラスの適用
UICollectionViewFlowLayoutクラスを継承
・PanModalで設定する部分
・SwipeCellKitを利用した表現
設定が必要なのはこの4点
(1)	連動するスクロール要素
(2)	ドラッグでのDismiss可否
(3)	最大表示時の高さ
(4)	最小表示時の高さ
今回は表示時の高さが一律

よって、(3)	=	(4)	とする。
横スワイプ処理でMenuが表示される
iOS13未満はUICollectionViewにこの機能がない&自作するのも結構大変
SwiftUI	+	OSS	Libraryの活用したUI実装の概要紹介
従来通りのUIKitでもよくお目にかかる表現をSwiftUIで実現する試み
UIKitを利用したUICollectionViewの様なレイアウト
伸縮するヘッダー(StreachyHeader)をSwiftUIで表現する
-	画像のParallax表現に関する部分をGeometryReaderで実現

-	簡単なものであればUIKitでの実装よりも直感的な印象
ASCollectionView:

https://github.com/apptekstudios/ASCollectionView
WaterfallGrid:

https://github.com/paololeonardi/WaterfallGrid
-	UIView(UIViewController)Representableだとちょっと面倒

-	SwiftUIの実装と上手に共存して実現する複雑なレイアウト

-	従来のUICollectionViewでもなかなか難しい表現
SwiftUIのView要素をどんな粒度で分割していくか
画面のおおもととなる部分とView要素を構成する部品を分離して考える
・ライブラリを利用する画面とView要素について
●●●ComponentViewがセルクラスのような位置付け

●●●ScreenViewが画面全体表示を担う

(●●●ScreenViewはPreview機能で閲覧可能)

ライブラリの処理が絡む部分は別途分離する形
・一番おおもととなるContentView
TabViewを利用して各種ScreenViewを表示する
FindCollection
ASCollectionViewを利用した
UICollectionViewの様な表現
GalleryGrid
WaterfallGridを利用した
UICollectionViewの様な表現
SwiftUIの表示部品1単位とEntity1単位を合わせてみる
ライブラリと連結して表現する部分と部品を分割する&細部の確認をしやすく
Find画面における1データ分のView要素
Gallery画面における1データ分のView要素
Find画面におけるEntity
FeaturedContentsEntity(

				featuredContentsId:	1,

				imageName:	"featured1"

)
RecentStoryEntity(

				recentStoryId:	1,

				userName:	"user1",

				publishedDate:	"2020.08.18",

				imageName:	"recent1",

				description:	“description”

)
GalleryEntity(

				id:	1,

				title:	"title1",

				summary:	“summary1",

				imageName:	"sample1"

)
Gallery画面におけるEntity
ライブラリと連携して表現する部分(1)
ライブラリ「ASCollectionView」を利用してレイアウト部分だけを利用する
Find画面における構造 UICollectionViewCompositionalLayoutの組み立て
Section:	0

特集バナー
Section:	1

最新情報
特集バナーをスワイプして切り替え
※	isPagingEnabled	=	true
・Section:	0
表示エリア…
最新情報はテキスト量で高さが変わる
・Section:	1
※	Vertically	Self-Sizing Cells
・UICollectionViewCompositionalLayoutのレイアウト部分の定義だけをSwiftUI内で共存させている
ライブラリと連携して表現する部分(2)
ライブラリ「WaterfallGrid」を利用したPinterestの様な画面の実装
Gallery画面における構造 ライブラリの実装方針に上手に形を合わせてい方針
ライブラリ側でスタイル定義やオプショ
ン値に関する設定はModifierの形であら
かじめ準備しているのでそれを活用
・WaterfallGrid実装部分の一部抜粋
var	body:	some	View	{

				return	WaterfallGrid((0..<galleries.count),	id:	.self)	

				{	index	in

									GalleryComponentView(gallery:	self.galleries[index])

				}

				.gridStyle(

									columnsInPortrait:	2,	columnsInLandscape:	4,

									spacing:	8,

									padding:	.init(

													top:	8,	leading:	8,	bottom:	8,	trailing:	8

									),

									animation:	.default

					)

				.scrollOptions(showsIndicators:	true)

}
①	ライブラリで提供されているもの
②	Viewとデータ要素の紐付け
余白や向きに応じたカラム数の設定
③	Scroll時のオプション設定
Image("profile_background")

				.resizable()

				.aspectRatio(contentMode:	.fill)

				.frame(width:	geometry.size.width,	height:	geometry.size.height	+	
geometry.frame(in:	.global).minY)

				.clipped()

				.offset(y:	-geometry.frame(in:	.global).minY)
SwiftUIのScrollViewを利用したStreachyHeader実装
GeometryReaderを利用して座標値の計算を利用してこの動きを実現する
一番上から更に

下へ引っ張る
従来通りに

上へスクロール
ここでのポイントとなる値 geometry.frame(in:	.global).minY
(1)	この値が0以下の場合:
(2)	この値が0より大きい場合: 画像を引き伸ばすような表現
画像のパララックス表示表現
Image("profile_background")

				.resizable()

				.aspectRatio(contentMode:	.fill)

				.frame(width:	geometry.size.width,	height:	geometry.size.height)

				//	MEMO:	割り算の分母を小さくすると変化度合いが大きくなる

				.offset(y:	-geometry.frame(in:	.global).minY/8)

				.clipped()
まとめ
UIKitでの複雑な表現やSwiftUIを利用した表現は難しくもあり興味深かった
1.	UICollectionViewを利用した複雑な表現や画面遷移のカスタマイズはやはり奥が深く難しい:
UICollectionViewを利用した複雑な構造を伴うUI実装やカスタムトランジションを伴うアニメーションは様々に応用する事で柔
軟かつ豊かな表現を可能にする反面、細部をこだわっていくとその難しさや奥深さがある部分だと改めて思います。
2.	新しいiOSバージョンに近しい表現や小さな変化があった部分に目を向けてみる:
一見するとありふれた表現やデザインだとしても、いざ実装を進めていくと簡単ではない場合がある。

SwiftUI	/	UICollectionView	/	App起動時のライフサイクルの機能などは個人的に結構注視していたりします。
今後ともiOSアプリ開発におけるUI実装の知見を深めてさらに追求していきたいと感じています。
3.	SwiftUIでUIKitを利用した時の様なUI実装を試みてみると違いが見えてくる:
SwiftUIベースで構築していく場合、複雑なUI表現を考えていく場合はUIKitとの共存を視野に入れる必要がある場合もある。

しかしながらUI表現によってはSwiftUIを利用した場合の方がシンプルに実現できることもあった。
おまけ
書籍の執筆や実装前にUI構造・設計・アイデア等をまとめたノートになります
Thank	you	for	listening	!

More Related Content

Similar to UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する

書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップFumiya Sakai
 
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...Cloud Native Day Tel Aviv
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureYshay Yaacobi
 
Build your first Monster APP
Build your first Monster APPBuild your first Monster APP
Build your first Monster APP2600Hz
 
Pitfall for WioLTE
Pitfall for WioLTEPitfall for WioLTE
Pitfall for WioLTEKouji Matsui
 
20151029 compose virtual_iot_meetup
20151029 compose virtual_iot_meetup20151029 compose virtual_iot_meetup
20151029 compose virtual_iot_meetupIker Larizgoitia
 
When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!
When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!
When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!Vui Nguyen
 
SharePoint Framework get started and best practices
SharePoint Framework get started and best practicesSharePoint Framework get started and best practices
SharePoint Framework get started and best practicesGiuliano De Luca
 
Introducing Ubuntu SDK
Introducing Ubuntu SDKIntroducing Ubuntu SDK
Introducing Ubuntu SDKShuduo Sang
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressSoftware Guru
 
Open Source Swift Workshop
Open Source Swift WorkshopOpen Source Swift Workshop
Open Source Swift WorkshopYusuke Kita
 
Building android and i os apps with visual studio
Building android and i os apps with visual studioBuilding android and i os apps with visual studio
Building android and i os apps with visual studioLohith Goudagere Nagaraj
 
Ikazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTIkazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTTetsuya Morimoto
 
Creating reusable pieces in Logic Apps
Creating reusable pieces in Logic AppsCreating reusable pieces in Logic Apps
Creating reusable pieces in Logic AppsBizTalk360
 
Resume - Alsey Coleman Miller - iOS Developer
Resume -  Alsey Coleman Miller - iOS DeveloperResume -  Alsey Coleman Miller - iOS Developer
Resume - Alsey Coleman Miller - iOS DeveloperAlsey Miller
 
Yubico case-study-github
Yubico case-study-githubYubico case-study-github
Yubico case-study-githubWJN
 
RPA summer school session 2.2: Run your first UI automation
RPA summer school session 2.2: Run your first UI automationRPA summer school session 2.2: Run your first UI automation
RPA summer school session 2.2: Run your first UI automationCristina Vidu
 
TypeScript 101 - We RISE Tech Conference
TypeScript 101 - We RISE Tech ConferenceTypeScript 101 - We RISE Tech Conference
TypeScript 101 - We RISE Tech ConferenceFrances Coronel
 

Similar to UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する (20)

書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ
 
What is Jupyter Notebook?
What is Jupyter Notebook?What is Jupyter Notebook?
What is Jupyter Notebook?
 
An intro to Eleventy
An intro to EleventyAn intro to Eleventy
An intro to Eleventy
 
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
 
Build your first Monster APP
Build your first Monster APPBuild your first Monster APP
Build your first Monster APP
 
Pitfall for WioLTE
Pitfall for WioLTEPitfall for WioLTE
Pitfall for WioLTE
 
20151029 compose virtual_iot_meetup
20151029 compose virtual_iot_meetup20151029 compose virtual_iot_meetup
20151029 compose virtual_iot_meetup
 
When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!
When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!
When You Can’t Go All In on SwiftUI, Build a Hybrid UI App Instead!
 
SharePoint Framework get started and best practices
SharePoint Framework get started and best practicesSharePoint Framework get started and best practices
SharePoint Framework get started and best practices
 
Introducing Ubuntu SDK
Introducing Ubuntu SDKIntroducing Ubuntu SDK
Introducing Ubuntu SDK
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Open Source Swift Workshop
Open Source Swift WorkshopOpen Source Swift Workshop
Open Source Swift Workshop
 
Building android and i os apps with visual studio
Building android and i os apps with visual studioBuilding android and i os apps with visual studio
Building android and i os apps with visual studio
 
Ikazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTIkazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LT
 
Creating reusable pieces in Logic Apps
Creating reusable pieces in Logic AppsCreating reusable pieces in Logic Apps
Creating reusable pieces in Logic Apps
 
Resume - Alsey Coleman Miller - iOS Developer
Resume -  Alsey Coleman Miller - iOS DeveloperResume -  Alsey Coleman Miller - iOS Developer
Resume - Alsey Coleman Miller - iOS Developer
 
Yubico case-study-github
Yubico case-study-githubYubico case-study-github
Yubico case-study-github
 
RPA summer school session 2.2: Run your first UI automation
RPA summer school session 2.2: Run your first UI automationRPA summer school session 2.2: Run your first UI automation
RPA summer school session 2.2: Run your first UI automation
 
TypeScript 101 - We RISE Tech Conference
TypeScript 101 - We RISE Tech ConferenceTypeScript 101 - We RISE Tech Conference
TypeScript 101 - We RISE Tech Conference
 

More from Fumiya Sakai

RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介Fumiya Sakai
 
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントiOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントFumiya Sakai
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐためにFumiya Sakai
 
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 RxSwiftFumiya Sakai
 
2022年の抱負とここ数年続けてきたインプット
2022年の抱負とここ数年続けてきたインプット2022年の抱負とここ数年続けてきたインプット
2022年の抱負とここ数年続けてきたインプットFumiya Sakai
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説Fumiya Sakai
 
最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返りFumiya Sakai
 
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返りFumiya Sakai
 
少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発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
 

More from Fumiya Sakai (20)

RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
 
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントiOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために
 
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
 
2022年の抱負とここ数年続けてきたインプット
2022年の抱負とここ数年続けてきたインプット2022年の抱負とここ数年続けてきたインプット
2022年の抱負とここ数年続けてきたインプット
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
 
最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り最近の業務やAndroid関連のインプットと振り返り
最近の業務やAndroid関連のインプットと振り返り
 
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
 
少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発少しずつキャッチアップしていくAndroidアプリ開発
少しずつキャッチアップしていくAndroidアプリ開発
 
レイヤー分けをしたアーキテクチャで作る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の楽しみ方
 

Recently uploaded

3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud DataEric D. Schabell
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)codyslingerland1
 
Extra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdfExtra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdfInfopole1
 
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch TuesdayIvanti
 
Oracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxOracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxSatishbabu Gunukula
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNeo4j
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameKapil Thakar
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc
 
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfQ4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfTejal81
 
Automation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsAutomation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsDianaGray10
 
Graphene Quantum Dots-Based Composites for Biomedical Applications
Graphene Quantum Dots-Based Composites for  Biomedical ApplicationsGraphene Quantum Dots-Based Composites for  Biomedical Applications
Graphene Quantum Dots-Based Composites for Biomedical Applicationsnooralam814309
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)IES VE
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInThousandEyes
 
From the origin to the future of Open Source model and business
From the origin to the future of  Open Source model and businessFrom the origin to the future of  Open Source model and business
From the origin to the future of Open Source model and businessFrancesco Corti
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0DanBrown980551
 
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxGraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxNeo4j
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FESTBillieHyde
 
EMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? WebinarEMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? WebinarThousandEyes
 
Keep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES LiveKeep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES LiveIES VE
 

Recently uploaded (20)

3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)
 
Extra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdfExtra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdf
 
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch Tuesday
 
Oracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxOracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptx
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4j
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First Frame
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
 
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfQ4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
 
Automation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsAutomation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projects
 
Graphene Quantum Dots-Based Composites for Biomedical Applications
Graphene Quantum Dots-Based Composites for  Biomedical ApplicationsGraphene Quantum Dots-Based Composites for  Biomedical Applications
Graphene Quantum Dots-Based Composites for Biomedical Applications
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
 
From the origin to the future of Open Source model and business
From the origin to the future of  Open Source model and businessFrom the origin to the future of  Open Source model and business
From the origin to the future of Open Source model and business
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0
 
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxGraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FEST
 
EMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? WebinarEMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? Webinar
 
Keep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES LiveKeep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES Live
 

UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する