Slide 1

Slide 1 text

ೳొཁ !OPUPSPJE J1IPOFΞϓϦ։ൃऀ೥݄೔ 4XJGU6*υΩϡϝϯτΞϓϦ 5SBOTGFSBCMF

Slide 2

Slide 2 text

࿩͢಺༰ w 5SBOTGFSBCMF w 4XJGU6*ͷ%SBH%SPQ

Slide 3

Slide 3 text

࿩͞ͳ͍಺༰ w υΩϡϝϯτΞϓϦ޲͚ʹ௥Ճ͞Εͨ6* w πʔϧόʔ΄͔

Slide 4

Slide 4 text

͓୊໨ w ೥ͷ4XJGU6* w 5SBOTGFSBCMF֓ཁ w 5SBOTGFSBCMFͷ࢖͍ํ w 5SBOTGFSBCMFͷྫ w ·ͱΊ

Slide 5

Slide 5 text

೥ͷ4XJGU6*

Slide 6

Slide 6 text

4XJGU6*ͷ৽ػೳϓϨθϯςʔγϣϯ w 4XJGU6*͕ൃද͞Εͯ೥໨ ʙ w ൃද౰ॳ͔ΒػೳڧԽ w ϚϧνϓϥοτϑΥʔϜରԠ w BTZODBXBJUBDUPSʹରԠ

Slide 7

Slide 7 text

4XJGU6*ϓϨθϯςʔγϣϯ ৽ػೳ঺հଟ͗͢໰୊

Slide 8

Slide 8 text

%FWFMPQFSΞϓϦ

Slide 9

Slide 9 text

%FWFMPQFSΞϓϦ ೥ ೥

Slide 10

Slide 10 text

ϓϨθϯλΠτϧ͕ॏͳΓ͗͢ɻ ৽ػೳΛΞϐʔϧ͢ΔλΠτϧͷ ߟҊ͕"QQMFٻΊΒΕΔ

Slide 11

Slide 11 text

࿩Λຊ୊ʹ໭ͯ͠

Slide 12

Slide 12 text

4XJGU6*ͷυΩϡϝϯτΞϓϦରԠ

Slide 13

Slide 13 text

4XJGU6*ͷυΩϡϝϯτΞϓϦରԠ w 4XJGU6*ൃදͷ೥͔ΒςϯϓϨʔτ͕ଘࡏ w ೥ʹ4XJGUݴޠ޲͚ʹϑΝΠϧܗࣜϑϨʔϜϫʔΫΛ௥Ճ w 6OJGPSN5ZQF*EFOUJ fi FSGSBNFXPSL w ೥πʔϧόʔɺ4QMJU7JFXͳͲͷػೳڧԽ

Slide 14

Slide 14 text

೥ͷυΩϡϝϯτΞϓϦʹ͍ͭͯ͸4QFBLFS%FDLͰެ։த ˣ IUUQTJSJNBTVDPNBQQMFNVMUJQMBUGPSNEPDVNFOUBQQ TVNNBSZ

Slide 15

Slide 15 text

υΩϡϝϯτΞϓϦͷෆຬ఺ w ϑΝΠϧܗࣜͷઃఆ͸NBD04ͱJ1IPOFJ1BEͰ෼͔Ε͍ͯΔ w NBD04༻JOGPQMJTUɺJ1IPOFJ1BE༻JOGPQMJTU w ϑΝΠϧܗࣜʹ͍ͭͯ͸෼͔Εͨ·· ೥ݱࡏ w υΩϡϝϯτΞϓϦΒ͍͠ݟͨ໨ʹͳΒͳ͍ αϙʔτෆ଍ w J04ɺNBD047FOUVSBͰڧԽ w %SBH%SPQରԠ͕ෆे෼ w ೥ʹ5SBOTGFSBCMFΛ࢖ͬͯରԠ

Slide 16

Slide 16 text

υΩϡϝϯτΞϓϦͷෆຬ఺ w ϑΝΠϧܗࣜͷઃఆ͸NBD04ͱJ1IPOFJ1BEͰ෼͔Ε͍ͯΔ w NBD04༻JOGPQMJTUɺJ1IPOFJ1BE༻JOGPQMJTU w ϑΝΠϧܗࣜʹ͍ͭͯ͸෼͔Εͨ·· ೥ݱࡏ w υΩϡϝϯτΞϓϦΒ͍͠ݟͨ໨ʹͳΒͳ͍ αϙʔτෆ଍ w J04ɺNBD047FOUVSBͰڧԽ w %SBH%SPQରԠ͕ෆे෼ w ೥ʹ5SBOTGFSBCMFΛ࢖ͬͯରԠ /FX

Slide 17

Slide 17 text

5SBOTGFSBCMF֓ཁ

Slide 18

Slide 18 text

5SBOTGFSBCMF wΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠΛऔΓѻ͏ w4XJGUͷQSPUPDPMͷҰछ DPEBCMF TFOEBCMF FUDʜ w4XJGUݴޠઐ༻ wએݴతϓϩάϥϛϯάʹԊͬͨܗͰهड़Մೳ w4XJGU6*Ͱ׳Ε਌͠Μͩهड़͕Մೳ

Slide 19

Slide 19 text

5SBOTGFSBCMF wΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠΛऔΓѻ͏ w4XJGUͷQSPUPDPMͷҰछ DPEBCMF TFOEBCMF FUDʜ w4XJGUݴޠઐ༻ wએݴతϓϩάϥϛϯάʹԊͬͨܗͰهड़Մೳ w4XJGU6*Ͱ׳Ε਌͠Μͩهड़͕Մೳ

Slide 20

Slide 20 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ ૹΓݩ ड͚ઌ σʔλ جຊૹΓݩͱड͚ઌͰσʔλΛ౉͢

Slide 21

Slide 21 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ ૹΓݩ ड͚ઌ σʔλ ΞϓϦ" ૹΓݩͱड͚ઌ͸ΞϓϦ಺෦ ΞϓϦ಺ͷ΍ΓऔΓͳͷͰಠ࣮ࣗ૷΋Մೳͩͬͨ

Slide 22

Slide 22 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ ૹΓݩ ड͚ઌ σʔλ ૹΓݩͱड͚ઌ͸ผΞϓϦ ΞϓϦ" ΞϓϦ# ΞϓϦಉ࢜Ͱ"1*Λ࢖ͬͨσʔλͷड͚౉͠Λ࣮ݱ͢Δඞཁ͋Γ

Slide 23

Slide 23 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ ૹΓݩ ड͚ઌ σʔλ 04 ૹΓݩ͸04ɺड͚ઌ͸ΞϓϦ ΞϓϦ# ༻్޲͚"1*͕༻ҙ͞ΕΔࣄྫ͕ଟ͔ͬͨ FYը૾ϐοΧʔ

Slide 24

Slide 24 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ ૹΔσʔλ͸Ӭଓੑ͕ඞཁ ૹΓݩ ड͚ઌ σʔλ 􀫦 􀤄 Memory Storage σʔλͷ΍ΓऔΓ͸͍ͭߦΘΕΔ ͔͸໌Β͔Ͱ͸ͳ͍ɻ 04ʹΑͬͯϝϞϦ͔Β4UPSBHF ΁ͷୀආ͕ߦΘΕΔ৔߹͕͋Δɻ

Slide 25

Slide 25 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ ૹΔσʔλܗࣜͷ͏ͪग़དྷ߹͍ͷܗࣜΛར༻Ͱ͖Δɻ %BUB *NBHF 1MBJOUFYU "UUSJCVUFUFYU 63- όΠφϦσʔλ͸ɺը૾ϑΥʔϚοτ 1OH +QFH ɺө૾ϑΥʔϚοτ NQ NPW ͳͲ04ʹొ࿥͞Ε͍ͯΔܗࣜ ΛࢦఆͰ͖Δ 6OJGPSN5ZQF*EFOUJ fi FS ɻ

Slide 26

Slide 26 text

ΞϓϦؒɺ04ͱΞϓϦؒͰͷσʔλ΍ΓऔΓશൠ औΓѻ͏σʔλ͸ଟଶੑ͕͋Δ ૹΓݩ ड͚ઌ σʔλ ը૾ ଐੑจࣈྻ จࣈྻ ༏ઌ౓Λ͚ͭͯड ͚౉͢σʔλͷܗ ࣜΛࢦఆͰ͖Δɻ ༏ઌ౓ )JHI -PX

Slide 27

Slide 27 text

σʔλͷ΍ΓऔΓʹؔͯ͠એݴత ʹهड़Ͱ͖Δͷ͕ɺ5SBOTGFSBCMF

Slide 28

Slide 28 text

5SBOTGFSBCMFͷ࢖͍ํ

Slide 29

Slide 29 text

·ͣ͸5SBOTGFSBCMFϓϩτίϧʹରԠ ͢Δߏ଄ମɺΦϒδΣΫτΛ࡞੒͢Δ

Slide 30

Slide 30 text

5SBOTGFSBCMFϓϩτίϧ TUBUJDϝϯόม਺USBOTGFS3FQSFTFOUBUJPOʹରԠ͢Δ @available(iOS 16.0, macOS 13.0, tvOS 16.0, watchOS 9.0, *) public protocol Transferable { /// The type of the representation used to import and export the item. /// /// Swift infers this type from the return value of the /// ``transferRepresentation`` property. associatedtype Representation : TransferRepresentation /// The representation used to import and export the item. /// /// A ``transferRepresentation`` can contain multiple representations /// for different content types. @TransferRepresentationBuilder static var transferRepresentation: Self.Representation { get } }

Slide 31

Slide 31 text

5SBOTGFSBCMFϓϩτίϧ TUBUJDϝϯόม਺USBOTGFS3FQSFTFOUBUJPOʹରԠ͢Δ @available(iOS 16.0, macOS 13.0, tvOS 16.0, watchOS 9.0, *) public protocol Transferable { /// The type of the representation used to import and export the item. /// /// Swift infers this type from the return value of the /// ``transferRepresentation`` property. associatedtype Representation : TransferRepresentation /// The representation used to import and export the item. /// /// A ``transferRepresentation`` can contain multiple representations /// for different content types. @TransferRepresentationBuilder static var transferRepresentation: Self.Representation { get } } !5SBOTGFS3FQSFTFOUBUJPO#VJMEFS͸ίʔυతͳ ݟͨ໨ͳΫϦʔϯ͞Λҡ࣋ͭͭ͠ɺϏϧυதʹద੾ͳ ίʔυʹมܗ͍ͤͯ͞Δɻ ٕज़తʹ͸4XJGU"UUSJCVUFTΛ࢖༻͠൥ࡶͳίʔυ Λ୹͍ίʔυͱͯ͠දݱՄೳͱ͍ͯ͠Δɻ

Slide 32

Slide 32 text

5SBOTGFS3FQSFTFOUBUJPOΛͭҎ ্౉͚ͩ͢Ͱ࣮ݱՄೳɻ

Slide 33

Slide 33 text

5SBOTGFS3FQSFTFOUBUJPO సૹઌͰ࠶ݱՄೳͳσʔλܗࣜΛࢦఆ͢Δ w %BUB3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞Εͨ%BUBΛ౉͢ w Ұํ޲ͱ૒ํ޲͕Մೳ w 'JMF3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞ΕͨϑΝΠϧͷ'JMF63-Λ౉͢ w $PEBCMF3FQSFTFOUBUJPO w $PEBCMFϓϩτίϧʹରԠͨ͠ܗࣜΛ౉͢ w 1SPYZ3FQSFTFOUBUJPO w ,FZ1BUIͰ౉͞ΕͨܗࣜΛ౉͢

Slide 34

Slide 34 text

5SBOTGFS3FQSFTFOUBUJPO సૹઌͰ࠶ݱՄೳͳσʔλܗࣜΛࢦఆ͢Δ w %BUB3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞Εͨ%BUBΛ౉͢ w Ұํ޲ͱ૒ํ޲͕Մೳ w 'JMF3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞ΕͨϑΝΠϧͷ'JMF63-Λ౉͢ w $PEBCMF3FQSFTFOUBUJPO w $PEBCMFϓϩτίϧʹରԠͨ͠ܗࣜΛ౉͢ w 1SPYZ3FQSFTFOUBUJPO w ,FZ1BUIͰ౉͞ΕͨܗࣜΛ౉͢ έʔεᶄ૒ํ޲ %BUB3FQSFTFOUBUJPO DPOUFOU5ZQF ʜ έʔεᶃҰํ޲ %BUB3FQSFTFOUBUJPO FYQPSUFE$POUF OU5ZQFʜ

Slide 35

Slide 35 text

5SBOTGFS3FQSFTFOUBUJPO సૹઌͰ࠶ݱՄೳͳσʔλܗࣜΛࢦఆ͢Δ w %BUB3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞Εͨ%BUBΛ౉͢ w Ұํ޲ͱ૒ํ޲͕Մೳ w 'JMF3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞ΕͨϑΝΠϧͷ'JMF63-Λ౉͢ w $PEBCMF3FQSFTFOUBUJPO w $PEBCMFϓϩτίϧʹରԠͨ͠ܗࣜΛ౉͢ w 1SPYZ3FQSFTFOUBUJPO w ,FZ1BUIͰ౉͞ΕͨܗࣜΛ౉͢ έʔεᶃڊେͳϑΝΠϧ FYө૾ϑΝΠϧɺFUD έʔεᶄߏ଄Խ͞ΕͨϑΝΠϧ ϑΝΠϧʹݟ͑Δ͕࣮ࡍ͸ϑΥ ϧμʹؚ·ΕΔෳ਺ͷϑΝΠϧ FYYDPEFͷϓϩδΣΫτϑΝΠ ϧ

Slide 36

Slide 36 text

5SBOTGFS3FQSFTFOUBUJPO సૹઌͰ࠶ݱՄೳͳσʔλܗࣜΛࢦఆ͢Δ w %BUB3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞Εͨ%BUBΛ౉͢ w Ұํ޲ͱ૒ํ޲͕Մೳ w 'JMF3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞ΕͨϑΝΠϧͷ'JMF63-Λ౉͢ w $PEBCMF3FQSFTFOUBUJPO w $PEBCMFϓϩτίϧʹରԠͨ͠ܗࣜΛ౉͢ w 1SPYZ3FQSFTFOUBUJPO w ,FZ1BUIͰ౉͞ΕͨܗࣜΛ౉͢ 4XJGU6*ͷ*NBHFɺ 4USJOHɺ*OUͳͲ

Slide 37

Slide 37 text

5SBOTGFS3FQSFTFOUBUJPO సૹઌͰ࠶ݱՄೳͳσʔλܗࣜΛࢦఆ͢Δ w %BUB3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞Εͨ%BUBΛ౉͢ w Ұํ޲ͱ૒ํ޲͕Մೳ w 'JMF3FQSFTFOUBUJPO w 6OJGPSN5ZQF*EFOUJ fi FSTʹొ࿥͞ΕͨϑΝΠϧͷ'JMF63-Λ౉͢ w $PEBCMF3FQSFTFOUBUJPO w $PEBCMFϓϩτίϧʹରԠͨ͠ܗࣜΛ౉͢ w 1SPYZ3FQSFTFOUBUJPO w ,FZ1BUIͰ౉͞ΕͨܗࣜΛ౉͢ 5SBOTGFSBCMFʹରԠͨ͠ ෦෼Λ౉͢͜ͱ͕Ͱ͖Δɻ

Slide 38

Slide 38 text

5SBOTGFS3FQSFTFOUBUJPO هड़ྫ struct SymbolDragItem: Transferable { let data: Data let image: Image let symbol: Symbol static var transferRepresentation: some TransferRepresentation { DataRepresentation(exportedContentType: .png) { combination in combination.data } ProxyRepresentation(exporting: \.image) ProxyRepresentation(exporting: \.symbol) } }

Slide 39

Slide 39 text

5SBOTGFS3FQSFTFOUBUJPO هड़ྫ struct SymbolDragItem: Transferable { let data: Data let image: Image let symbol: Symbol static var transferRepresentation: some TransferRepresentation { DataRepresentation(exportedContentType: .png) { combination in combination.data } ProxyRepresentation(exporting: \.image) ProxyRepresentation(exporting: \.symbol) } } όΠφϦσʔλ 1/( 4XJGU6*ͷ*NBHF ಠࣗఆٛ

Slide 40

Slide 40 text

5SBOTGFSBCMFͷྫ

Slide 41

Slide 41 text

5SBOTGFSCMFͷαϯϓϧίʔυ IUUQTHJUIVCDPNOPUPSPJE 4JNQMF4ZNCPM

Slide 42

Slide 42 text

5SBOTGFSCMFͷαϯϓϧ w υΩϡϝϯτΞϓϦ w ϓϨʔϯςΩετ͔ΒਤܗΛੜ੒ w ਤܗΛϩϯάϓϨε͢Δͱυϥο άՄೳʹ w υϩοϓઌʹΑͬͯը૾ɺςΩετ Λίϐʔ w ผΞϓϦ%SPQ"QQʹυϩοϓՄೳ 4JNQMF4ZNCPM

Slide 43

Slide 43 text

4JNQMF4ZNCPM υϥοάଆ document.symbol.view( width: proxy.size.width * 0.5, height: proxy.size.width * 0.5 ) .draggable( document.draggableItem() )

Slide 44

Slide 44 text

4JNQMF4ZNCPM υϥοάଆ$POUFOU7JFXTXJGU document.symbol.view( width: proxy.size.width * 0.5, height: proxy.size.width * 0.5 ) .draggable( document.draggableItem() ) 5SBOTGFSBCMFରԠߏ଄ମ

Slide 45

Slide 45 text

4JNQMF4ZNCPM υϥοάଆ$POUFOU7JFXTXJGU document.symbol.view( width: proxy.size.width * 0.5, height: proxy.size.width * 0.5 ) .draggable( document.draggableItem() ) 5SBOTGFSBCMFରԠߏ଄ମ

Slide 46

Slide 46 text

4JNQMF4ZNCPM υϥοάΦϒδΣΫτͷੜ੒4JNQMF4ZNCPM%PDVNFOUTXJGU @MainActor func draggableItem() -> SymbolDragItem { return SymbolDragItem( data: temporaryData!, image: symbolImage(), symbol: symbol) } @MainActor func symbolImage() -> Image { Image( uiImage: UIImage(data: temporaryData!)! ) }

Slide 47

Slide 47 text

4JNQMF4ZNCPM 5SBOTGFSBCMFϓϩτίϧʹରԠͨ͠ߏ଄ମ4JNQMF4ZNCPM%PDVNFOUTXJGU struct SymbolDragItem: Transferable { let data: Data let image: Image let symbol: Symbol static var transferRepresentation: some TransferRepresentation { DataRepresentation(exportedContentType: .png) { combination in combination.data } ProxyRepresentation(exporting: \.image) ProxyRepresentation(exporting: \.symbol) } }

Slide 48

Slide 48 text

4JNQMF4ZNCPM υϩοϓଆ$POUFOU7JFXTXJGU RoundedRectangle(cornerSize: .init(width: 10, height: 10)) .fill(Color.gray) .overlay { dropImage .resizable() .frame(width: proxy.size.height * 0.05, height: proxy.size.height * 0.05) } .frame(width: proxy.size.width * 0.4, height: proxy.size.height * 0.1 ) .dropDestination(for: Image.self) { images, location in dropImage = images.first! return true } ड͚औͬͨ*NBHFΛඳը༻ม਺ʹड͚౉͠

Slide 49

Slide 49 text

αϯϓϧίʔυͷ໰୊఺

Slide 50

Slide 50 text

αϯϓϧίʔυͷ໰୊఺ 7JFXΛඳը͢Δ*NBHF3FOEFSFSͷ࢖͍উख͕ສೳͰ͸ͳ͍ w*NBHF3FOEFSFS w4XJGU6*ͷ7JFX͔Βը૾Λੜ੒͢ΔͨΊͷػೳ J04ʙ wϝΠϯεϨου͔Βݺͼग़͕͠ඞཁ wΞϓϦ͕όοΫάϥϯυʹೖͬͨࡍʹඳը͕ແޮԽ͞ΕΔ৔߹͕͋ Δ *NBHF3FOEFSͰඳըػೳΛ୅ସ͢Δͷ͸ແཧ͕͋Δ

Slide 51

Slide 51 text

·ͱΊ

Slide 52

Slide 52 text

·ͱΊ w 4XJGU6*ͰͷυΩϡϝϯτΞϓϦपΓ͕ڧԽ͞Ε·ͨ͠ɻ೥ʹݟ͍͑ͯ ͨ՝୊ͷ͏ͪɺ%SBH%SPQʹ͍ͭͯ͸ղফ͞Ε·ͨ͠ w %SBH%SPQʹݶΒͣΞϓϦؒɺ04ΞϓϦؒͰͷσʔλ΍ΓऔΓʹؔͯ͠ 5SBOTGFSBCMFϓϩτίϧ͕༻ҙ͞Ε·ͨ͠ w ΞϓϦͷ%SBH%SPQͷ࣮૷͕؆୯ʹͳͬͨͷͰ৭ʑࢼߦࡨޡͰ͖ͯ໘ന͍Ͱ ͢ɻ

Slide 53

Slide 53 text

J045FDI#MPHߋ৽த w4XJDU6*Λ࢖ͬͯ̍̌̌ߦͰαϯϓϧίʔυΛॻ͘ 4XJGUߦγϦʔζଞ"QQMF։ൃؔ܎ͷهࣄΛܝࡌத Ͱ͢ɻ JSJNBTVDPN OPUFDPNOPUPSPJE wʹ΋هࡌதͰ͢ɻ

Slide 54

Slide 54 text

ࢀߟ w 8IBUTOFXJO4XJGU6*88%$7JEFPT"QQMF%FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w .FFU5SBOTGFSBCMF88%$7JEFPT"QQMF%FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w /PXJO3&"-*5:5FDIJ04ͷ৽ػೳʮ*NBHF3FOEFSFSʯͰ4XJGU6*ͷ7JFXΛ؆୯ʹը૾ʹॻ͖ग़͢ʛ3&"-*5:ʛOPUF w IUUQTOPUFDPNSFBMJUZ@FOHOO w <ϓϨθϯࢿྉ>ϚϧνϓϥοτϑΥʔϜ 4XJGU6* υΩϡϝϯτΞϓϦ w IUUQTJSJNBTVDPNBQQMFNVMUJQMBUGPSNEPDVNFOUBQQTVNNBSZ w <ϓϨθϯࢿྉ> "QQMF͕ ΍Γ͍ͨ์୊4XJGU"UUSJCVUFT w IUUQTJSJNBTVDPNBQQMFTXJGUBUUSJCVUFT