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

GeometryReader - SwiftUI

GeometryReader - SwiftUI

札幌iPhone開発懇談会 2025年10月勉強会資料

SwiftUI つかって2019年にアプリを使った男が2015年にSwiftUIアプリに戻ってきたが、実際SwiftUIに進展があったのかを検証するプレゼンテーション。

Avatar for notoroid

notoroid

October 23, 2025
Tweet

More Decks by notoroid

Other Decks in Programming

Transcript

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

    ΞϓϦ࡞࢛ͬͯ൒ੈل 8JOEPXTΞϓϦʙJ04  w झຯ͸ήʔϜ ൓ࣹਆܦ͕ਰ͑ͱ໨ͷർΕ͕ൈ͚ͳ͍
  2. w ຊମҎ֎͕ἧ͏ w 4UVEJP%JTQMBZ w ֎෦44% 5#  w ؂ࢹ༻Ϟχλʔ

    w ߴ͍έʔϒϧ 5IVOEFSCPMU   w 1BSBMMFMTಋೖ w NBD04Λෳ਺ಈ͔͢༧ఆ .BD4UVEJP
  3. 4XJGU6*ʹඈͼ͍ͭͨஉ 88%$ͷ4XJGU6*Λࢧ͑Δٕज़ͷؒʹ߹Θͤײ w 0CTFSWFSػೳ͕$PNCJOFGSBNFXPSLΛ࠾༻ͨؒ͠ʹ߹ͤ w 4XJGU6*ͷ؊Ͱ͋Δ6*ߋ৽ͷͨΊͷσʔλڙڅઌ͸0CTFSWBCMF0CKFDU೿ੜΫϥ εݶఆ ੍໿ଟ͠  w

    BTZODBXBJUBDUPSొ৔લ w ඇಉظॲཧΛ؆ܿʹهड़Ͱ͖ͳ͍ w ΫϦʔϯΞʔΩςΫνϟʔͳͲߟྀ͠ͳ͍ Ͱ͖ͳ͍ ࢓༷ w 0CTFSWFSػೳΛ༗ޮʹ͢ΔͷʹΞΫηε੍ݶ͕Ͱ͖ͳ͍
  4. 4XJGU6*೥ 88%$·Ͱʹࢧ͑Δٕज़͸ิڧͱஔ͖׵͑ w 0CTFSWFSػೳͷվળ w 0CTFSWBUJPO'SBNFXPSLΛ࣮ݱ͢ΔͨΊͷ4XJGU.BDSPT͕ಋೖɺ$PNCJOF GSBNFXPSL΋Ҿ͖ଓ͖ར༻Մೳɺ$PNCJOFʙΛੵۃతʹબͿཧ༝͸ͳ͍ w BTZODBXBJUBDUPSొ৔ w

    4XJGU6*্ͰඇಉظॲཧΛεϚʔτʹهड़Ͱ͖Δ͸ͣ ਖ਼͍͠ॲཧΛهड़͢Δʹ͸։ ൃऀʹΑΔ  w 4XJGU9DPEF͔Β4XJGU6*Ͱසൟʹ࢖ΘΕΔ!4UBUFͰ΋QSJWBUF TFU ࢦఆ Մೳʹ4XJGU6*Β͍͠هड़ͰҰํ޲ͷߋ৽ΛࢦఆՄೳʹ
  5. 4XJGU6* 4XJGU6*  4XJGU6*  4XJGU 4XJGU BTZODBXBJUBDUPS QSJWBUF TFU

     4XJGUNBDSP $PNCJOFGSBNFXPSL 0CTFSWBUJPOGSBNFXPSL
  6. ғΜͩൣғͷ7JFXͷมԽΛݕ஌͢Δ w ॆిใࠂ͞Μ w ͭͷόοςϦʔදࣔߴ͞Λಘ ΔͨΊʹ࢖༻ (FPNFUSZ3FBEFS var body: some

    View { ZStack { Rectangle().fill(Color.clear) if self.rootState.batteries[index].level.count > 0 { GeometryReader { geometry in VStack { Spacer() self.batteryLevelView(levelDisplayStyle: self.rootState.repository.levelDisplayStyle, geometryProxy: geometry) Spacer() } } } /// লུ } }
  7. (FPNFUSZ3FBEFSͷྺ࢙ ॳظϦϦʔεʙ88%$ w88%$ J04 4XJGU6*ॳొ৔ w4XJGU6*ͱ(FPNFUSZ3FBEFS͕ॳΊͯಋೖɻ1SFGFSFODF,FZͷ૊Έ߹ΘͤͰߋ৽Մೳ w88%$ J04  w(FPNFUSZ3FBEFSͱPO$IBOHF

    ͷ૊Έ߹ΘͤΛ࢖͏͜ͱͰ1SFGFSFODF,FZ͕ෆཁʹ w88%$ J04  wେ͖ͳมߋͳ͠ w88%$ J04  w-BZPVUϓϩτίϧಋೖͰΧελϜϨΠΞ΢τͷ୅ସखஈ͕ఏڙ w88%$ J04  w4DSPMM7JFX಺ͰͷδΦϝτϦ৘ใऔಘ͕վળ TDSPMM1PTJUJPOͳͲͷ৽͍͠"1*  w88%$ J04  w<ॏཁ>PO(FPNFUSZ$IBOHFϞσΟϑΝΠΞ͕௥Ճ
  8. (FPNFUSZ3FBEFSͷྺ࢙ ॳظϦϦʔεʙ88%$ w88%$ J04 4XJGU6*ॳొ৔ w4XJGU6*ͱ(FPNFUSZ3FBEFS͕ॳΊͯಋೖɻ1SFGFSFODF,FZͷ૊Έ߹ΘͤͰߋ৽Մೳ w88%$ J04  w(FPNFUSZ3FBEFSͱPO$IBOHF

    ͷ૊Έ߹ΘͤΛ࢖͏͜ͱͰ1SFGFSFODF,FZ͕ෆཁʹ w88%$ J04  wେ͖ͳมߋͳ͠ w88%$ J04  w-BZPVUϓϩτίϧಋೖͰΧελϜϨΠΞ΢τͷ୅ସखஈ͕ఏڙ w88%$ J04  w4DSPMM7JFX಺ͰͷδΦϝτϦ৘ใऔಘ͕վળ TDSPMM1PTJUJPOͳͲͷ৽͍͠"1*  w88%$ J04  w<ॏཁ>PO(FPNFUSZ$IBOHFϞσΟϑΝΠΞ͕௥Ճ -B[Z74UBDL-B[Z)4UBDL͕ಋೖ (FPNFUSZ3FBEFSͱͷ૊Έ߹ΘͤͰॳظ ͷϨΠΞ΢τ໰୊͕ݦࡏԽ ίϛϡχςΟͰ(FPNFUSZ3FBEFS -B[Z74UBDLͷ ໰୊ճආύλʔϯཱ͕֬ (FPNFUSZ3FBEFSͳ͠ͰαΠ ζɾҐஔ৘ใΛऔಘՄೳʹ J04Ҏલʹ΋όοΫϙʔτ
  9. (FPNFUSZ3FBEFSͷίετ Ϗϧυ΋஗͍࣮͠ߦ࣌΋ߋ৽Πϕϯτଟൃ struct ContentView: View { var body: some View

    { GeometryReader { geometry in VStack { Text("Width: \(geometry.size.width)") Text("Height: \(geometry.size.height)") } .frame(width: geometry.size.width, height: geometry.size.height) } } } (FPNFUSZ3FBEFS΋7JFXͷ೿ੜΫϥεͳ ͷͰ4XJGUݴޠͷHFOFSJDΛؚΜͩϏϧυ ͕ൃੜ HFPNFUSZͷߋ৽ͷͨͼʹɺಉ֊૚ͷ 7JFX΋ר͖ࠐΜͰߋ৽ൃੜ
  10. PO(FPNFUSZ$IBOHF J04 .PEJ fi FSͱͯ͠ӨڹΛݮΒ͢ɺΠϕϯτ؂ࢹઌͱมߋΞΫγϣϯΛ෼͚Δඞཁ͋Γ Color.clear .frame(height: 1) .onGeometryChange(for: CGFloat.self)

    { proxy in proxy.frame(in: .global).minY } action: { newMinY in withAnimation(.easeInOut(duration: 0.15)) { print("newValue=\(newMinY)") isCollapsed = newMinY < 100 } } (FPNFUSZ1SPYZ͔Β؂ࢹ͢Δ஋ΛಘΔ BBDUJPOͰ৽͍͠஋ΛಘΔ
  11. w PO(FPNFUSZ$IBOHF GPSPGBDUJP O c"QQMF%FWFMPQFS %PDVNFOUBUJPO w IUUQTEFWFMPQFSBQQMFDPN EPDVNFOUBUJPOTXJGUVJWJFX POHFPNFUSZDIBOHF

    GPSPGBDUJ PO  w 4XJGU6*Ή͚ʹ੔ཧ͞Εͨঢ়ଶ؂ࢹ 0CTFSWBUJPO4QFBLFS%FDL w IUUQTTQFBLFSEFDLDPN OPUPSPJETXJGUVJNVLFOJ [IFOHMJTBSFUB[IVBOHUBJKJBO TIJPCTFSWBUJPO w Αͤ͋ͭΊ4XJGU4XJGU 4QFBLFS%FDL w IUUQTTQFBLFSEFDLDPN OPUPSPJEZPTFBUVNFTXJGU TXJGUEPU ࢀߟ OPUPSPJE4QFBLFS%FDL