Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UIViewController - Interactive PopGesture

UIViewController - Interactive PopGesture

札幌iPhoneアプリ開発懇談会 2025年4月勉強会資料

UIKit - UIViewController - Interactive PopGesture についてのプレゼンテーション資料。

notoroid

April 04, 2025
Tweet

More Decks by notoroid

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ w J1IPOFΞϓϦ։ൃऀ 9!OPUPSPJE  w ΞϓϦ։ൃऀྺ ʙ  w

    ΞϓϦ࡞࢛ͬͯ൒ੈل 8JOEPXTΞϓϦʙJ04  w झຯ͸ήʔϜ ൓ࣹਆܦ͕ਰ͑ͱ໨ͷർΕ͕ൈ͚ͳ͍
  2. 6*,JUΛ࢖ͬͨΞϓϦ։ൃͷجຊ w J04ΞϓϦը໘ͷ౔୆Λఏڙ w ը໘্ʹ6*ύʔπ഑ஔՄೳ w ϨΠΞ΢τݟͳ͕ΒฤूՄೳ 4UPSZCPBSE  w

    J04ΞϓϦΒ͍͠ը໘ͷڍಈΛఏڙ w ໊শ͸ɺ7JFXͱ$POUSPMMFSͱ͍͏ͭͷ ػೳ 7JFX $POUSPMMFS Λ୲͍ͬͯΔ͔Β w 6*/BWJHBUJPO$POUSPMMFSͰը໘ભҠΛ࣮ ݱ 6*7JFX$POUSPMMFS
  3. ࢖͏͚ͩͰJ04Β͍͠ڍಈΛఏڙ w 6*7JFX$POUSPMMFSΛػೳ֨ೲͨ͠΋ ͷ w લͷը໘ΛQVTIɺ໭Δ࣌͸QPQ͢Δڍ ಈ w ෳ਺QVTIՄೳ w

    ໭ΔϘλϯͰલͷը໘΁QPQ w ໭ΔϘλϯ௕ԡ͠ͰQPQઌΛࢦఆ w ࠨ͔Β4XJQFͰલͷը໘΁QPQ 6/BWJHBUJPO$POUSPMMFS ௕ԡ͠Ͱ໭Δը໘ΛࢦఆՄೳ J1IPOFͷΤοδΛࠨ͔Βӈ ΁εϫΠϓͰͭ໭Δ
  4. 6*,JU6*(FTUVSF3FDPHOJ[FS w J04ΞϓϦͰͷλοϓଞδΣενϟʔΠϕϯτΛ੍ޚ͢ΔΦϒδΣΫτ w 6*7JFX ը໘Λߏ੒͢Δύʔπ ʹొ࿥ w 5BQ 4XJQF

    1JODI w ෳ਺ͷࢦΛݕ஌Մೳ w ιʔείʔυ΍4UPSZCPBSEͰඥ෇͚Մೳ w EFMFHBUFͰHFTUVSFΠϕϯτ΁ͷհೖ ։࢝൑அɺதஅͳͲ ͕Մೳ
  5. 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಺ͰTUBUF΍MPDBUJPO ΛऔಘͰ͖Δ ᶄ0CKFDUJWF$༝དྷͷػೳͳͷ Ͱ!PCKDΛϚʔΫ
  6. BDUJPOͱEFMFHBUF BDUJPO͸HFTUVSFSFDPHOJ[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ͱͯ͠ઃఆՄ ೳʹ
  7. 6*4DSFFO&EHF1BO3FDPHOJ[FSᶅ Ͳ͏΍ͬͯ&EHF1BOͰDPO fi SNΛ࣮ݱ͢Δ ࣗલͰ&EHF1BO Λ࣮૷͢Δ͔ ࣗ࡞&EHF1BOͰ ػೳ࣮૷ ඞཁ͕͋ͬͨ৔߹ɺ &EHF4XJQFͲ

    ͲͷΑ͏ʹࢭΊΔ͔ ͸͍ ͍͍͑ EFMFHBUFͷΠϕϯτ Λ࢖༻͢Δ &EHF1BOΛதࢭɺ ֬ೝ"MFSUΛग़͢ &EHF1BO͕࢝·Δલʹॲཧ͢Δ ͷར༻ऀ͸ޡ࡞ಈ͔ࣗ෼ͷૢ࡞͔ Θ͔Βͳ͍ BDUJPOΛར༻͢Δ
  8. 6*4DSFFO&EHF1BO3FDPHOJ[FSᶅ Ͳ͏΍ͬͯ&EHF1BOͰDPO fi SNΛ࣮ݱ͢Δ ࣗલͰ&EHF1BO Λ࣮૷͢Δ͔ ࣗ࡞&EHF1BOͰ ػೳ࣮૷ ඞཁ͕͋ͬͨ৔߹ɺ &EHF4XJQFͲ

    ͲͷΑ͏ʹࢭΊΔ͔ ͸͍ ͍͍͑ EFMFHBUFͷΠϕϯτ Λ࢖༻͢Δ &EHF1BOΛதࢭɺ ֬ೝ"MFSUΛग़͢ BDUJPOΛར༻͢Δ "DUJPOͷMPDBUJPOͷҐ ஔͰ֬ೝ"MFSUΛग़͢ ૢ࡞͕ૣ͗͢ΔͱΠϕϯτΛ DBUDIͰ͖ͳ͍
  9. 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 S5VUPSJBMŠ4VQFS&BTZ"QQT w IUUQTTVQFSFBTZBQQTDPNCMPH TDSFFOFEHFTXJQF HFTUVSFPOJQIPOFVTJOHUIF VJTDSFFOFEHFQBOHFTUVSFSFDPHOJ[ FSUVUPSJBM ࢀߟ OPUPSPJE4QFBLFS%FDL