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
UIViewController - Interactive PopGesture
Search
notoroid
April 04, 2025
Programming
0
71
UIViewController - Interactive PopGesture
札幌iPhoneアプリ開発懇談会 2025年4月勉強会資料
UIKit - UIViewController - Interactive PopGesture についてのプレゼンテーション資料。
notoroid
April 04, 2025
Tweet
Share
More Decks by notoroid
See All by notoroid
Info.plist - after Xcode26.
notoroid
0
37
GeometryReader - SwiftUI
notoroid
0
75
iOS 26 SDKの新機能 (liquid抜き) - iOS26orLaterUpdateAndSceneForUIKit
notoroid
0
170
UIテスト自動化サポート- Testbed for XCUIAutomation practice
notoroid
0
200
Xcodeショートカット 2025年版
notoroid
0
96
ZIPでくれ - Apple謹製 geocoding/ reverse geocoding
notoroid
0
150
WeatherKit iOS18 update - お天気の更新
notoroid
0
110
AppIntentsの用途 - AppleのGPT元年
notoroid
1
200
Privacy manifests - Appleと開発コミュニティ
notoroid
1
260
Other Decks in Programming
See All in Programming
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
3
1.3k
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
170
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
310
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
TestingOsaka6_Ozono
o3
0
270
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
1.1k
Python札幌 LT資料
t3tra
7
1.1k
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
170
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.1k
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.3k
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
210
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
320
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.9k
Darren the Foodie - Storyboard
khoart
PRO
2
2.1k
Writing Fast Ruby
sferik
630
62k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Done Done
chrislema
186
16k
Google's AI Overviews - The New Search
badams
0
890
Navigating Weather and Climate Data
rabernat
0
71
HDC tutorial
michielstock
1
320
Deep Space Network (abreviated)
tonyrice
0
34
Documentation Writing (for coders)
carmenintech
77
5.2k
What's in a price? How to price your products and services
michaelherold
246
13k
Practical Orchestrator
shlominoach
190
11k
Transcript
6*7JFX$POUSPMMFS *OUFSBDUJWF1PQ(FTUVSF 04ΞϓϦ։ൃDMBTTJD ೳొཁ !OPUPSPJE J1IPOFΞϓϦ։ൃऀ݄
͢༰ w ΞϓϦͷ༷͕ϞόΠϧΞϓϦ։ൃͷηΦϦʔ͔Β֎ΕΔ࣌ w 6*(FTUVSF3FDPHOJ[FS w JOUFSBDUJWF1PQ(FTUVSF3FDPHOJ[FS
͞ͳ͍༰ w ൚༻తͳ6*(FTUVSF3FDPHOJ[FSͷհ w 4XJGU6*ͰͷJOUFSBDUJWFQPQͷڍಈ
͓ w J044%,DMBTTJD w อଘ֬ೝ DPO fi SN ΛՃ͢Δ
ࣗݾհ w J1IPOFΞϓϦ։ൃऀ 9!OPUPSPJE w ΞϓϦ։ൃऀྺ ʙ w
ΞϓϦ࡞࢛ͬͯੈل 8JOEPXTΞϓϦʙJ04 w झຯήʔϜ ࣹਆܦ͕ਰ͑ͱͷർΕ͕ൈ͚ͳ͍
J044%,DMBTTJD
88%$લ
͜ͷ࣌ظJ044%,ʹؔ͢Δ τϐοΫ͕গͳ͍ͷ͕
ͦΜͳ࣌ʹͦ͜J044%,ͷ DMBTTJDͳ༰ʹ৮ΕͯΈΔ
ͦͷ͓
6*7JFX$POUSPMMFS
6*,JUΛͬͨΞϓϦ։ൃͷجຊ w J04ΞϓϦը໘ͷΛఏڙ w ը໘্ʹ6*ύʔπஔՄೳ w ϨΠΞτݟͳ͕ΒฤूՄೳ 4UPSZCPBSE w
J04ΞϓϦΒ͍͠ը໘ͷڍಈΛఏڙ w ໊শɺ7JFXͱ$POUSPMMFSͱ͍͏ͭͷ ػೳ 7JFX $POUSPMMFS Λ୲͍ͬͯΔ͔Β w 6*/BWJHBUJPO$POUSPMMFSͰը໘ભҠΛ࣮ ݱ 6*7JFX$POUSPMMFS
͏͚ͩͰJ04Β͍͠ڍಈΛఏڙ w 6*7JFX$POUSPMMFSΛػೳ֨ೲͨ͠ ͷ w લͷը໘ΛQVTIɺΔ࣌QPQ͢Δڍ ಈ w ෳQVTIՄೳ w
ΔϘλϯͰલͷը໘QPQ w ΔϘλϯԡ͠ͰQPQઌΛࢦఆ w ࠨ͔Β4XJQFͰલͷը໘QPQ 6/BWJHBUJPO$POUSPMMFS ԡ͠ͰΔը໘ΛࢦఆՄೳ J1IPOFͷΤοδΛࠨ͔Βӈ εϫΠϓͰͭΔ
4UPSZCPBSEͰը ໘ΛՃ͢Δͱɺ ը໘ભҠΛ࣮ݱ
Ͱɺඪ४Ҏ֎ͷڍಈΛ ࣮ݱ͠Α͏ͱ͢Δͱ
อଘ֬ೝ DPOGJSN ΛՃ͢Δ
ඪ४ػೳʹհೖ͢Δ w ಛఆͷը໘Ͱ༰Λมߋޙʹɺ લͷը໘ʹΖ͏ͱ͢Δͱ֬ೝ ΞϥʔτͰอଘ֬ೝ͢Δ w อଘɺ͘͠อଘ͠ͳ͍Ͱ ΔΛબͿͱલͷը໘ʹΔ ֬ೝػೳΛՃ͢Δ
ඪ४ಈ࡞Λࠩ͠ସ͑Δ w OBWJHBUJPO*UFNCBDL#BS#VUUP O*UFNΛແޮԽ͢Δ w 6*#BS#VUUPO*UFN ΛࠨϘλϯ Λஔ͖͑Δ ΔϘλϯΛࠩ͠ସ͑Δ ௨ৗΔϘλϯ͔Βஔ͖͑
͜ΕͰສࣄղܾ
ͱͳΒͳ͍
(FTUVSF͕ແޮԽ w ΔϘλϯΛࠩ͠ସ͑Δͱࠨԑ ͔Βӈ1BO͢Δૢ࡞͕ແޮʹͳ Δ w 6*/BWJHBUJPO$POUSPMMFSJOUFSBD UJWF1PQ(FTUVSF3FDPHOJ[FSΛ มߋ͢Δ ΔϘλϯΛࠩ͠ସ͑ͷฐ
௨ৗΔϘλϯ͔Βஔ͖͑
6*,JU6*(FTUVSF3FDPHOJ[FS w J04ΞϓϦͰͷλοϓଞδΣενϟʔΠϕϯτΛ੍ޚ͢ΔΦϒδΣΫτ w 6*7JFX ը໘Λߏ͢Δύʔπ ʹొ w 5BQ 4XJQF
1JODI w ෳͷࢦΛݕՄೳ w ιʔείʔυ4UPSZCPBSEͰඥ͚Մೳ w EFMFHBUFͰHFTUVSFΠϕϯτͷհೖ ։࢝அɺதஅͳͲ ͕Մೳ
TUBUFϓϩύςΟͱΠϕϯτ ΠϕϯτʹδΣενϟ ʔใؚ͕·ΕΔ δΣενϟʔ͕Ωϟϯ ηϧ͞ΕΔ͜ͱ͋Δ
TUBUFFOEͰॲ ཧΛߦ͏λΠϓɻ TUBUFDIBOHF ͷ࣌ɺҐஔใͰ ॲཧΛߦ͏ɻ TUBUFϓϩύςΟͱΠϕϯτ
BDUJPOͱEFMFHBUF HFTUVSFSFDPHOJ[FSͷEFMFHBUFʹઃఆ͢Δ import UIKit class RootViewController: UIViewController { override func
viewDidLoad() { super.viewDidLoad() navigationController?.interactivePopGestureRecognizer?.addTarget(self, action: #selector(onInteractivePop(_:))) } @objc func onInteractivePop( _ gestureRecognizer: UIGestureRecognizer) { // stateΛ֬ೝ switch gestureRecognizer.state { case .began: print("began") case .changed: print("changed") case .ended: print("ended") default: break } // ҐஔใΛ֬ೝ _ = gestureRecognizer.location(in: view) } } ᶃHFTUVSFSFDPHOJ[FSʹ BDUJPOΛొ͢Δ ᶅBDUJPOͰTUBUFMPDBUJPO ΛऔಘͰ͖Δ ᶄ0CKFDUJWF$༝དྷͷػೳͳͷ Ͱ!PCKDΛϚʔΫ
BDUJPOͱEFMFHBUF BDUJPOHFTUVSFSFDPHOJ[FSʹՃ͢Δ class RootViewController: UIViewController { override func viewDidLoad() {
super.viewDidLoad() navigationController?.interactivePopGestureRecognizer?.delegate = self } } extension RootViewController: UIGestureRecognizerDelegate { func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { return true } } ᶃ EFMFHBUFʹ 6*(FTUVSF3FDPHOJ[FS%FMF HBUFʹରԠͨ͠ΦϒδΣΫτ Λઃఆ͢Δ ᶅ6*(FTUVSF3FDPHOJ[FSͷڍಈʹհೖ Ͱ͖Δɻओʹ։࢝அɺதࢭஅ ᶄ6*(FTUVSF3FDPHOJ[FS%FMFHBUFʹ ४ڌ͍ͯ͠ΔͱEFMFHBUFͱͯ͠ઃఆՄ ೳʹ
6*ύʔπʹຒΊࠐ·Εͨ6*(FTUVSF3FDPHOJ[FS w 4DSPMM7JFXͷ֦େɺεΫϩʔϧಈ࡞ w /BWJHBUJPOͷը໘ભҠ w JOUFSBDUJWF1PQ(FTUVSF3FDPHOJ[FS w ͲͷΑ͏ͳ࣮͔ҰԠӅṭ w
6*4DSFFO&EHF1BO3FDPHOJ[FS
6*4DSFFO&EHF1BO3FDPHOJ[FSᶃ w 6*(FTUVSF3FDPHOJ[FSͷੜΫϥε w &EHF1BOૢ࡞ΛΧελϚΠζՄೳ w ͦͷ߹Ξχϝʔγϣϯ੍ޚͱͦͷޙͷڍಈ࣮ඞཁ w 6*ΛεϥΠυ͢Δ w
6*Λ҉సͤ͞Δ
6*4DSFFO&EHF1BO3FDPHOJ[FSᶄ w 6*/BWJHBUJPO$POUSPMMFSʹຒΊࠐ·Εͨ 6*4DSFFO&EHF1BO3FDPHOJ[FS w Ξχϝʔγϣϯɺը໘ભҠ·Ͱඋ w OBWJHBUJPO*UFNCBDL#VUUPOΛࠩ͠ସ͑Δͱ ແޮԽ w
JOUFSBDUJWF1PQ(FTUVSF3FDPHOJ[FSͷ EFMFHFΛొ͢Δͱػೳ༗ޮ
6*4DSFFO&EHF1BO3FDPHOJ[FSᶅ Ͳ͏ͬͯ&EHF1BOͰDPO fi SNΛ࣮ݱ͢Δ ࣗલͰ&EHF1BO Λ࣮͢Δ͔ ࣗ࡞&EHF1BOͰ ػೳ࣮ 04ಠࣗͷڍಈ BOJNBUJPO
ͳͲ Λ࠶ݱ͢Δඞཁ͋Γ ͍ ͍͍͑
6*4DSFFO&EHF1BO3FDPHOJ[FSᶅ Ͳ͏ͬͯ&EHF1BOͰDPO fi SNΛ࣮ݱ͢Δ ࣗલͰ&EHF1BO Λ࣮͢Δ͔ ࣗ࡞&EHF1BOͰ ػೳ࣮ ඞཁ͕͋ͬͨ߹ɺ &EHF4XJQFͲ
ͲͷΑ͏ʹࢭΊΔ͔ ͍ ͍͍͑ EFMFHBUFͷΠϕϯτ Λ༻͢Δ &EHF1BOΛதࢭɺ ֬ೝ"MFSUΛग़͢ &EHF1BO͕࢝·Δલʹॲཧ͢Δ ͷར༻ऀޡ࡞ಈ͔ࣗͷૢ࡞͔ Θ͔Βͳ͍ BDUJPOΛར༻͢Δ
6*4DSFFO&EHF1BO3FDPHOJ[FSᶅ Ͳ͏ͬͯ&EHF1BOͰDPO fi SNΛ࣮ݱ͢Δ ࣗલͰ&EHF1BO Λ࣮͢Δ͔ ࣗ࡞&EHF1BOͰ ػೳ࣮ ඞཁ͕͋ͬͨ߹ɺ &EHF4XJQFͲ
ͲͷΑ͏ʹࢭΊΔ͔ ͍ ͍͍͑ EFMFHBUFͷΠϕϯτ Λ༻͢Δ &EHF1BOΛதࢭɺ ֬ೝ"MFSUΛग़͢ BDUJPOΛར༻͢Δ "DUJPOͷMPDBUJPOͷҐ ஔͰ֬ೝ"MFSUΛग़͢ ૢ࡞͕ૣ͗͢ΔͱΠϕϯτΛ DBUDIͰ͖ͳ͍
αϯϓϧίʔυ
IUUQTHJUIVCDPNOPUPSPJE *OUFSBDUJWF1PQ(FTUVSF5FTU
·ͱΊ w88%$લͰ4%,ʹؔ͢ΔτϐοΫ͕ͳ͍ͷͰDMBTTJDͳ6*,JU ͷʹ͍ͭͯ͠·ͨ͠ w6*4DSFFO&EHF1BO3FDPHOJ[FSΛ੍ޚ͢ΔͨΊʹز͔ͭͷํ๏͕͋ Γ·͢ wϞόΠϧΞϓϦͷηΦϦʔ͔Β֎ΕΔ࣮։ൃલஈ֊ͰͬͨΛ͔ ͚͍ͨͷͰ͢
w OPUPSPJE*OUFSBDUJWF1PQ(FTUVSF5FTU w IUUQTHJUIVCDPNOPUPSPJE *OUFSBDUJWF1PQ(FTUVSF5FTU w 6*4DSFFO&EHF1BO(FTUVSF3FDPHOJ[F Sc"QQMF%FWFMPQFS%PDVNFOUBUJPO w IUUQTEFWFMPQFSBQQMFDPN
EPDVNFOUBUJPOVJLJU VJTDSFFOFEHFQBOHFTUVSFSFDPHOJ[ FS w 4DSFFO&EHF4XJQF(FTUVSFPO J1IPOFVTJOHUIF 6*4DSFFO&EHF1BO(FTUVSF3FDPHOJ[F S5VUPSJBM4VQFS&BTZ"QQT w IUUQTTVQFSFBTZBQQTDPNCMPH TDSFFOFEHFTXJQF HFTUVSFPOJQIPOFVTJOHUIF VJTDSFFOFEHFQBOHFTUVSFSFDPHOJ[ FSUVUPSJBM ࢀߟ OPUPSPJE4QFBLFS%FDL