Slide 1

Slide 1 text

Ϛϧν΢Οϯυ΢࣮ફΨΠυ  tatsubee Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 2

Slide 2 text

• iOS൛pixivΞϓϦ։ൃத • ෱Ԭੜ·Εɾ෱Ԭҭͪɾ౦ژࡏॅ • झຯ: ͓ֆඳ͖ tatsubee  QSPEVDUʛQJYJW Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 3

Slide 3 text

iPadOS 26͔Βͷ Ϛϧν΢Οϯυ΢֓ཁ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 4

Slide 4 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ iPadOS 26 ~ • Ϣʔβʔͷબ୒ʹΑͬͯϑϧεΫϦʔϯɺ΋͘͠͸΢Οϯυ΢෼ ׂͷͲͪΒ͔ͷݟͨ໨Ͱදࣔ͞ΕΔ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 5

Slide 5 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ iPadOS 26 ~ • Ϣʔβʔͷબ୒ʹΑͬͯϑϧεΫϦʔϯɺ΋͘͠͸΢Οϯυ΢෼ ׂͷͲͪΒ͔ͷݟͨ໨Ͱදࣔ͞ΕΔ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 6

Slide 6 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ iPadOS 26 ~ • Ϣʔβʔͷબ୒ʹΑͬͯϑϧεΫϦʔϯɺ΋͘͠͸΢Οϯυ΢෼ ׂͷͲͪΒ͔ͷݟͨ໨Ͱදࣔ͞ΕΔ • ΢Οϯυ΢෼ׂදࣔͷαΠζ͸ॊೈʹมಈͤ͞Δ͜ͱ͕Ͱ͖ɺҐ ஔ΋ࣗ༝ʹ഑ஔ͢Δ͜ͱ͕Ͱ͖Δ • (ࠓ·Ͱͱಉ͘͡)ΞϓϦͷ΢Οϯυ΢͸ෳ਺։͘͜ͱ͕Ͱ͖Δ • ΢Οϯυ΢ͷຕ਺͸ࠓ·ͰҎ্  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 7

Slide 7 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ iPadOS 26 ~ • Ϣʔβʔͷબ୒ʹΑͬͯϑϧεΫϦʔϯɺ΋͘͠͸΢Οϯυ΢෼ ׂͷͲͪΒ͔ͷݟͨ໨Ͱදࣔ͞ΕΔ • ΢Οϯυ΢෼ׂදࣔͷαΠζ͸ॊೈʹมಈͤ͞Δ͜ͱ͕Ͱ͖ɺҐ ஔ΋ࣗ༝ʹ഑ஔ͢Δ͜ͱ͕Ͱ͖Δ • (ࠓ·Ͱͱಉ͘͡)ΞϓϦͷ΢Οϯυ΢͸ෳ਺։͘͜ͱ͕Ͱ͖Δ • ΢Οϯυ΢ͷຕ਺͸ࠓ·ͰҎ্  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 8

Slide 8 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ iPadOS 26 ~ • Ϣʔβʔͷબ୒ʹΑͬͯϑϧεΫϦʔϯɺ΋͘͠͸΢Οϯυ΢෼ ׂͷͲͪΒ͔ͷݟͨ໨Ͱදࣔ͞ΕΔ • ΢Οϯυ΢෼ׂදࣔͷαΠζ͸ॊೈʹมಈͤ͞Δ͜ͱ͕Ͱ͖ɺҐ ஔ΋ࣗ༝ʹ഑ஔ͢Δ͜ͱ͕Ͱ͖Δ • (ࠓ·Ͱͱಉ͘͡)ΞϓϦͷ΢Οϯυ΢͸ෳ਺։͘͜ͱ͕Ͱ͖Δ • ΢Οϯυ΢ͷຕ਺͸ࠓ·ͰҎ্  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF J1BE04ʹ഑৴͍ͯ͠Δ͢΂ͯͷΞϓϦ͕ దԠ͢΂͖ཁ఺

Slide 9

Slide 9 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ iPadOS 26 ~ • Ϣʔβʔͷબ୒ʹΑͬͯϑϧεΫϦʔϯɺ΋͘͠͸΢Οϯυ΢෼ ׂͷͲͪΒ͔ͷݟͨ໨Ͱදࣔ͞ΕΔ • ΢Οϯυ΢෼ׂදࣔͷαΠζ͸ॊೈʹมಈͤ͞Δ͜ͱ͕Ͱ͖ɺҐ ஔ΋ࣗ༝ʹ഑ஔ͢Δ͜ͱ͕Ͱ͖Δ • (ࠓ·Ͱͱಉ͘͡)ΞϓϦͷ΢Οϯυ΢͸ෳ਺։͘͜ͱ͕Ͱ͖Δ • ΢Οϯυ΢ͷຕ਺͸ࠓ·ͰҎ্  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF J1BE04ʹ഑৴͍ͯ͠ΔΞϓϦ͕ରԠͰ͖Δͱ ʮڧΈʯͱͳΔମݧ

Slide 10

Slide 10 text

iPadOS 26͔ΒͷϚϧν΢Οϯυ΢֓ཁ ͱ͍͏Θ͚Ͱ • ΢Οϯυ΢෼ׂදࣔ΁ͷదԠ • ৽͍͠΢Οϯυ΢ͷ։͖ํ ʹয఺Λ౰ͯͯɺϚϧν΢Οϯυ΢ͷ࣮ફํ๏Λݟ͍͖ͯ·͢  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 11

Slide 11 text

΢Οϯυ΢෼ׂදࣔʹదԠ͢Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 12

Slide 12 text

΢Οϯυ΢෼ׂදࣔʹదԠ͢Δ ΢Οϯυ΢෼ׂදࣔͷࡍʹ͸࣍ͷ2఺Λߟྀ͍ͨ͠ • ΢Οϯυ΢ίϯτϩʔϧ • ΢Οϯυ΢αΠζ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 13

Slide 13 text

΢Οϯυ΢෼ׂදࣔʹదԠ͢Δ ΢Οϯυ΢෼ׂදࣔͷࡍʹ͸࣍ͷ2఺Λߟྀ͍ͨ͠ • ΢Οϯυ΢ίϯτϩʔϧ • ΢Οϯυ΢αΠζ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 14

Slide 14 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢෼ׂදࣔͷࡍʹ͸ɺToolbarྖҬͷઌ୺ʹ΢Οϯυ΢ί ϯτϩʔϧ͕දࣔ͞ΕΔɻ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 15

Slide 15 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢෼ׂදࣔͷࡍʹ͸ɺToolbarྖҬͷઌ୺ʹ΢Οϯυ΢ί ϯτϩʔϧ͕දࣔ͞ΕΔɻ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF ˢ͜Ε

Slide 16

Slide 16 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢෼ׂදࣔͷࡍʹ͸ɺToolbarྖҬͷઌ୺ʹ΢Οϯυ΢ί ϯτϩʔϧ͕දࣔ͞ΕΔɻ ΢Οϯυ΢ίϯτϩʔϧ͕ίϯςϯπͱॏͳΒͳ͍Α͏ʹ͠Α͏ʂ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF ˢ͜Ε

Slide 17

Slide 17 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ toolbarΛ࢖༻͍ͯ͠Δ৔߹: ToolbarItem(placement:content:)͸ ࣗಈతʹ΢Οϯυ΢ίϯτϩʔϧΛආ͚ͯ͘ΕΔͷͰɺ ಛʹҙࣝ͢Δඞཁ͸ͳ͍  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 18

Slide 18 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ toolbarΛ࢖༻͍ͯ͠Δ৔߹: Text(" ↖︎ ࠨ্ʹ஫໨") .toolbar { ToolbarItem(placement: .topBarLeading) { Text("1") } ToolbarItem(placement: .topBarLeading) { Text("2") } ToolbarItem(placement: .topBarLeading) { Text("3") } ToolbarItem(placement: .topBarTrailing) { Image(systemName: "ellipsis") }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 19

Slide 19 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ toolbarΛ࢖༻͍ͯ͠Δ৔߹: Text(" ↖︎ ࠨ্ʹ஫໨") .toolbar { ToolbarItem(placement: .topBarLeading) { Text("1") } ToolbarItem(placement: .topBarLeading) { Text("2") } ToolbarItem(placement: .topBarLeading) { Text("3") } ToolbarItem(placement: .topBarTrailing) { Image(systemName: "ellipsis") }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 20

Slide 20 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ toolbarΛ࢖༻͍ͯ͠ͳ͍৔߹: ΢Οϯυ΢ίϯτϩʔϧͱॏͳΒͳ͍Α͏ʹ खಈͰௐ੔͢Δඞཁ͕͋Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 21

Slide 21 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ toolbarΛ࢖༻͍ͯ͠ͳ͍৔߹: ΢Οϯυ΢ίϯτϩʔϧͱॏͳΒͳ͍Α͏ʹ खಈͰௐ੔͢Δඞཁ͕͋Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 22

Slide 22 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 23

Slide 23 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ → GeometoryReader  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 24

Slide 24 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 25

Slide 25 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 26

Slide 26 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF ΢Οϯυ΢ίϯτϩʔϧͷ Ґஔ͕औಘͰ͖ͨ🎉

Slide 27

Slide 27 text

 ஫ҙ⚠

Slide 28

Slide 28 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 29

Slide 29 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ηʔϑΤϦΞͷӨڹΛड͚ͯ ΢Οϯυ΢ίϯτϩʔϧ͸Ҡಈ͢Δʂ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 30

Slide 30 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 31

Slide 31 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height + proxy.safeAreaInsets.top ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 32

Slide 32 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ΢Οϯυ΢ίϯτϩʔϧͷҐஔΛऔಘ͢Δํ๏ GeometryReader { proxy in Rectangle() .fill(.red) .frame( width: proxy.containerCornerInsets.topLeading.width, height: proxy.containerCornerInsets.topLeading.height + proxy.safeAreaInsets.top ) .ignoresSafeArea() }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 33

Slide 33 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ͨͿΜ࣮༻తͳίʔυ GeometryReader { proxy in Text("͜͜ʹ஫໨ʂ") .padding(.leading, proxy.containerCornerInsets.topLeading.width) .animation(.default, value: proxy.containerCornerInsets) }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 34

Slide 34 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ ͨͿΜ࣮༻తͳίʔυ GeometryReader { proxy in Text("͜͜ʹ஫໨ʂ") .padding(.leading, proxy.containerCornerInsets.topLeading.width) .animation(.default, value: proxy.containerCornerInsets) }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 35

Slide 35 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ UIKitͷ৔߹ @available(iOS 26.0, tvOS 26.0, *) @MainActor @preconcurrency public func layoutGuide( for region: UIView.LayoutRegion ) -> UILayoutGuide  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 36

Slide 36 text

΢Οϯυ΢ίϯτϩʔϧΛߟྀ͢Δ UIKitͷ৔߹ NSLayoutConstraint.activate([ uiView.topAnchor.constraint( equalTo: view.safeAreaLayoutGuide.topAnchor ), uiView.leadingAnchor.constraint( equalTo: view.layoutGuide(for: .safeArea(cornerAdaptation: .horizontal)).leadingAnchor ), ])  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 37

Slide 37 text

৽͍͠΢Οϯυ΢Λ։͘  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 38

Slide 38 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. OpenWindowAction  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 39

Slide 39 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. OpenWindowAction @main struct iPadMultiWindowApp: App { var body: some Scene { WindowGroup { ContentView() } WindowGroup(id: "ID") { SomeView() } } }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 40

Slide 40 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. OpenWindowAction struct ContentView: View { @Environment(\.openWindow) var openWindow var body: some View { Button("৽͍͠΢Οϯυ΢Λ։͘") { openWindow(id: "ID") } } }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 41

Slide 41 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. SwiftUI struct ContentView: View { @Environment(\.openWindow) var openWindow var body: some View { Button("৽͍͠΢Οϯυ΢Λ։͘") { openWindow(id: "ID") } } }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 42

Slide 42 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. Drag & Drop struct ContentView: View { var body: some View { Image(resource) } }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 43

Slide 43 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. Drag & Drop struct ContentView: View { var body: some View { Image(resource) .onDrag { } } }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 44

Slide 44 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. Drag & Drop struct ContentView: View { var body: some View { Image(resource) .onDrag { let userActivity = NSUserActivity( activityType: "dev.shoryu.MultiWindowExample.openWindow" ) userActivity.targetContentIdentifier = "targetContentIdentifier" return NSItemProvider(object: userActivity) } } }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 45

Slide 45 text

৽͍͠΢Οϯυ΢Λ։͘ ৽͍͠΢Οϯυ΢ͷ։͖ํ ver. Drag & Drop WindowGroup(id: Self.activityType) { TargetView() } .handlesExternalEvents(matching: ["targetContentIdentifier"])  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 46

Slide 46 text

৽͍͠΢Οϯυ΢Λ։͘ iPadOS 26Ͱ͸ແ਺ͷ΢Οϯυ΢Λ։͘͜ͱ͕Ͱ͖Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 47

Slide 47 text

৽͍͠΢Οϯυ΢Λ։͘ iPadOS 26Ͱ͸ແ਺ͷ΢Οϯυ΢Λ։͘͜ͱ͕Ͱ͖Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 48

Slide 48 text

৽͍͠΢Οϯυ΢Λ։͘ iPadOS 26Ͱ͸ແ਺ͷ΢Οϯυ΢Λ։͘͜ͱ͕Ͱ͖Δ • 10ຕఔ౓ͰiPadͷڍಈ͕ॏ͘… • ࣮༻తʹ͸5ຕఔ౓ʁ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 49

Slide 49 text

৽͍͠΢Οϯυ΢Λ։͘ iPadOS 26Ͱ͸ແ਺ͷ΢Οϯυ΢Λ։͘͜ͱ͕Ͱ͖Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 50

Slide 50 text

৽͍͠΢Οϯυ΢Λ։͘ iPadOS 26Ͱ͸ແ਺ͷ΢Οϯυ΢Λ։͘͜ͱ͕Ͱ͖Δ → Կ͕Ͳͷ΢Οϯυ΢ͳͷ͔Λಛఆ͠΍͘͢͢Δඞཁ͕͋Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 51

Slide 51 text

৽͍͠΢Οϯυ΢Λ։͘ iPadOS 26Ͱ͸ແ਺ͷ΢Οϯυ΢Λ։͘͜ͱ͕Ͱ͖Δ → Կ͕Ͳͷ΢Οϯυ΢ͳͷ͔Λࣝผ͠΍͘͢͢Δඞཁ͕͋Δ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 52

Slide 52 text

৽͍͠΢Οϯυ΢Λ։͘ ΢Οϯυ΢ʹλΠτϧΛ͚ͭΔ WindowGroup(id: "ID") { SomeView() .navigationBarTitle("΢Οϯυ΢ͷλΠτϧ") }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 53

Slide 53 text

৽͍͠΢Οϯυ΢Λ։͘ ΢Οϯυ΢ʹλΠτϧΛ͚ͭΔ WindowGroup(id: "ID") { SomeView() .navigationBarTitle("΢Οϯυ΢ͷλΠτϧ") }  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 54

Slide 54 text

·ͱΊ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 55

Slide 55 text

·ͱΊ • iPadOS 26͔Β͢΂ͯͷΞϓϦ͸΢Οϯυ΢෼ׂදࣔ͞ΕΔΑ͏ ʹͳͬͨΑ • े෼ͳίϯςϯπΛදࣔͰ͖ΔΑ͏ʹɺ ΢Οϯυ΢ίϯτϩʔϧͷྖҬͱ΢Οϯυ΢αΠζͷॊೈੑʹ͸ ͢΂ͯͷΞϓϦͰؾΛ͚ͭΑ͏ • Ϛϧν΢Οϯυ΢Λ࢖͍͜ͳͤ͹ΑΓྑ͍iPadΞϓϦମݧ͕௥ٻ Ͱ͖Δ͔΋ʂ  Ϛϧν΢Οϯυ΢࣮ફΨΠυʛUBUTVCFF

Slide 56

Slide 56 text

 ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ