Slide 1

Slide 1 text

How to implement timetable view on iOS kumabook 2019/3/19

Slide 2

Slide 2 text

λΠϜςʔϒϧͱ͸ʁ • λΠϜεέδϡʔϧ͕هࡌ͞Εͨ༧ఆද • ϑΣε༻ͷλΠϜςʔϒϧ • ̍೔͝ͱʹදࣔ • εςʔδ͝ͱʹදࣔ • ͓ؾʹೖΓొ࿥

Slide 3

Slide 3 text

λΠϜςʔϒϧͱ͸ʁ

Slide 4

Slide 4 text

λΠϜςʔϒϧͷཁ݅ • ॎ࣠ɿ࣌ؒɺ1೔෼Λදࣔ • ԣ࣠ɿεςʔδ • N࣌0෼ͷՕॴʹϥΠϯ • ݱࡏ࣌ࠁϥΠϯ • ϐϯνΠϯɾϐϯνΞ΢τͰ֦େ • ೔෇ΛϑϦοΫͰ੾Γସ͑Δ

Slide 5

Slide 5 text

ઃܭͷࢦ਑ • ॎํ޲΋ԣํ޲΋εΫϩʔϧ • ࣠ͷ෦෼͸εΫϩʔϧ͠ͳ͍ • ࣠ͷ෦෼͸֦େ͠ͳ͍ • εϓϨουγʔτͬΆ͞

Slide 6

Slide 6 text

SpreavSheetView • kishikawakatsumi/SpreadsheetView • εϓϨουγʔτͬΆ͍UIΛ࡞ΕΔ • UITableView, UICollectionViewͱಉ͡Α͏ʹඳը͞Ε͍ͯΔՕॴͷ ΈදࣔͰ͖Δ • ηϧͷ݁߹ɾݻఆηϧʹ΋ରԠ • ηϧ͝ͱʹborderͷࢦఆ͕Ͱ͖Δ • ֦େ͸ඇαϙʔτ • ͜Ε͚ͩͰ͸ཁ݅Λຬͨͤͳ͍ແཧͬΆ͍

Slide 7

Slide 7 text

4QSFBE4IFFU7JFX 6*4DSPMM7JFX $PMVNO)FBEFS7JFX 3PX)FBEFS7JFX

Slide 8

Slide 8 text

جຊઃܭ • ॎ࣠ɾԣ࣠ɾຊମͷ̏ͭͷUIScrollViewΛ༻ҙ • ࣮ࡍʹεΫϩʔϧͰ͖Δͷ͸ຊମͷΈ • ຊମͷεΫϩʔϧҐஔͱಉظ

Slide 9

Slide 9 text

ຊମλΠϜςʔϒϧ

Slide 10

Slide 10 text

λΠϜςʔϒϧͷجຊํ਑ • ཁ݅తʹ͸5෼ࠁΈͰεέδϡʔϧ͕૊·Ε͍ͯΔ • ྫ: εςʔδCͰ10:30~11:05 • ॎ࣠͸1෼୯Ґɺԣ࣠͸̍εςʔδ୯Ґ • ηϧΛ݁߹ͤͯ͞ɺλΠϜςʔϒϧΛ࡞Δ • ηϧͷ݁߹ϧʔϧ͸࠲ඪͷϖΞͰ((x1, y1), (x2,y2))දݱ͞ΕΔ • x1, y1, x2, y2 ͸̌Ҏ্ͷ੔਺ • 10:00ελʔτͱ͢Δͱ ((2, 30) (2, 65))Λ݁߹

Slide 11

Slide 11 text

ηϧͷ݁߹ϧʔϧͷܭࢉ

Slide 12

Slide 12 text

ηϧͷ݁߹ϧʔϧͷܭࢉ • show(ԋ໨)ͷ৘ใʢ։࢝࣌ࠁͱऴྃ࣌ࠁʣͷϦετ͔Βηϧͷ݁߹ ϧʔϧͷϦετ΁ͷม׵ • ̍εςʔδͣͭSlotͷϦετΛ࡞Δ • blankSlot …Կ΋ߦΘΕ͍ͯͳ͍࿮ • 0෼·ͨ͗͸̎ͭͷblankSlotΛ࡞Δ • 0෼·ͨ͗ͷΈborderͷࢦఆΛ͢Δ • showSlot … show͕͋Δ࿮

Slide 13

Slide 13 text

ηϧͷ݁߹ϧʔϧͷܭࢉ • ηϧͷ਺Λ࠷খʹ͢ΔͨΊʹ͸ɺεςʔδؒ Λލ͍ͩblankSlotηϧ݁߹͕ඞཁ • ࠷దԽ͢Δ΄Ͳͷίετ΋͔͔Βͳ͍ͷͰ লུ

Slide 14

Slide 14 text

ζʔϜ΁ͷରԠ • UIScrollView͸ຊདྷζʔϜػೳΛఏڙͯ͘͠Ε͍ͯΔ • ͔͠͠SpreadsheetView͸ζʔϜΛαϙʔτ͍ͯ͠ͳ ͍ • ݻఆηϧ༻ʹ̏ͭͷUIScrollViewΛ಺แʴεΫϩʔ ϧҐஔΛࣗલ؅ཧͰ่ΕΔ • ٯʹ͍͏ͱݻఆηϧΛ࢖Θͳ͍ʴεΫϩʔϧҐஔͷ ؅ཧΛͤ͞ͳ͚Ε͹ྑ͍

Slide 15

Slide 15 text

ζʔϜ΁ͷରԠ • ղܾҊ • ζʔϜ༻ͷUIScrollViewͰSpreadshhetViewΛϥοϓ • SpreadsheetView͸ηϧ͕શͯදࣔ͞ΕΔେ͖͞Λࢦఆ • ݻఆηϧ༻ͷUIScrollVIew΋΍͸ΓࣗલͰ࣋ͭ • ζʔϜͨ࣌͠ʹେ͖͞ͱεΫϩʔϧҐஔΛ௥ै • ຊମͷΈ͕֦େͯ͠ݻఆηϧ͸େ͖͞ͷΈେ͖͘ͳΔ • σϝϦοτ • λΠϜςʔϒϧͷαΠζ΍ηϧදࣔͷίετ͕Ͱ͔͘ͳΔͱύϑΥʔϚϯεʹ೉͋Γ • UITableViewɺUICollectionViewʢͲͪΒ΋ζʔϜʹରԠ͍ͯ͠ͳ͍ʣʹ΋ೖΕΔ͜ͱ͕ͩɺη ϧͷ஗ԆಡΈࠐΈͱζʔϜ͸૬ੑ͕ѱͦ͏

Slide 16

Slide 16 text

ճస΁ͷରԠ • σόΠεΛճస͢ΔͱɺαΠζ͕มΘΔ • εΫϩʔϧϏϡʔͷେ͖͞ • தͷηϧͷେ͖͞ • εΫϩʔϧҐஔΛͦͷ··ʹ͢Δͱɺ಺༰͕ มΘΔ

Slide 17

Slide 17 text

ճస΁ͷରԠ ॎ෯খ͘͞ͳͬͨ෼ͣΕΔ ಉ͡෦෼͕த৺ʹདྷΔΑ͏ʹ

Slide 18

Slide 18 text

ճస΁ͷରԠ • ճసલʹεΫϩʔϧҐஔΛ͓͍֮͑ͯͯճసޙʹ෮ݩ • ը໘ͷத৺࠲ඪ • ׂ߹Ͱ͓֮͑ͯ͘ • NOTES: UIScrollViewͷframe(autolayoutܦ༝)ͱcontentSize(αΠ ζʣͷมߋͱcontentOffset(εΫϩʔϧҐஔʣΛಉ࣌ʹߦ͏ͱ஋͕ ਖ਼͘͠൓ө͞Εͳ͍ͷͰɺ • frameͷมߋ->contentSizeͷมߋ-> contentOffsetͷมߋΛผ ͷRunLoopͰߦ͏

Slide 19

Slide 19 text

ϚΠςʔϒϧ

Slide 20

Slide 20 text

ϚΠςʔϒϧͷ࢓༷ • ͓ؾʹೖΓͨ͠΋ͷ͚ͩΛදࣔ • Ͱ͖Δ͚ͩԣ෯Λ޿͛ͯදࣔ͢Δ • ࣌ؒͷඃΓ͕͋Ε͹౳෼͢Δ

Slide 21

Slide 21 text

ϚΠςʔϒϧͷηϧͷ݁߹ϧʔϧͷܭࢉ • ࣌ؒͷඃ͍ͬͯΔShowͷ࿮ ͷ͔ͨ·Γ(ShowSlotBlock) Λݟ͚ͭΔ •

Slide 22

Slide 22 text

ϚΠςʔϒϧͷηϧͷ݁߹ϧʔϧͷܭࢉ • ̎ͭҎ্ͷBlockʹଐ͍ͯ͠ ΔSlot͕ଘࡏͨ͠ΒͦΕΒ ͷBlockΛϚʔδ͢Δ

Slide 23

Slide 23 text

BlockϦετͷܭࢉ(ٖࣅίʔυ) struct Block {
 var items: [Show]
 var start: Int
 var end: Int
 func hasOverlap(Show) -> Bool
 mutating func add(Show)
 mutating func merge(Block)
 }
 
 var blocks: Block = [] for stage in stages {
 for show in stage.shows {
 let indices = blocks.filterAndMapIndex { block in block.hasOverlap(show) }
 if indices.isEmpty { 
 blocks.append(newBlock(show))
 } else {
 var mergedBlock = blocks[indices[0]]
 mergedBlock.add(show)
 for i in 1..

Slide 24

Slide 24 text

ϚΠςʔϒϧͷηϧͷ݁߹ϧʔϧͷܭࢉ • ShowSlotBlockͱblankSlot ʹ෼ׂ͢Δ

Slide 25

Slide 25 text

ϚΠςʔϒϧͷηϧͷ݁߹ϧʔϧͷܭࢉ • ShowSlotBlock಺ΛshowSlotͱ blankSlotʹ෼ׂ • Block಺ͷߏ଄͸ྻ਺ʢεςʔδ ਺ʣ͕ݻఆ͞Ε͍ͯΔͷͰ௨ৗ λΠϜςʔϒϧͱશ͘ಉ͡ߏ଄ • Block಺Ͱͷྻͱશମͷྻͷؔ܎ ͸ޙड़

Slide 26

Slide 26 text

ϚΠςʔϒϧͷηϧͷ݁߹ϧʔϧͷܭࢉ • શମͷྻ෯ͱBlock಺ͷྻ෯ͷؔ܎ • શମͷྻ෯ΛWɺશମͷεςʔδ਺N • Block಺ͷεςʔδ਺n͸1..NͷͲΕ͔ • Block಺ͷηϧͷԣ෯w͸1/n * W • ηϧͷ݁߹ϧʔϧ͸੔਺ͱͯ͠දݱ͢Δඞ ཁ͕͋Δ • ͭ·Γશͯͷ1/n * W͕શͯ੔਺ʹͳΔ Α͏ʹWΛઃఆ͢Δඞཁ͕͋Δ

Slide 27

Slide 27 text

ϚΠςʔϒϧͷηϧͷ݁߹ϧʔϧͷܭࢉ • WΛ1..Nͷ࠷খެഒ਺͢Δͱྑ͍ • N=4ͷͱ͖ɺW=12 • 4εςʔδ … w= 3 • 3εςʔδ … w = 4 • 2εςʔδ … w = 6 • 1εςʔδ … w = 12 O O O O

Slide 28

Slide 28 text

ෳ਺ͷ਺ͷ࠷খެഒ਺ͷ࣮૷ • ෳ਺ͷ࠷খެഒ਺ˡ̎਺ͷ࠷খެഒ਺
 func lcm(v: [Int]) { return v.reduce(1) { lcm($0, $1) } } • ̎਺ͷ࠷খެഒ਺ˡ2਺ͷ࠷େެ໿਺
 func lcm(m: Int, n: Int) { return m * n / gcd(m, n) } • ࠷େެ໿਺ͱ࠷খެഒ਺ͷੵ͕΋ͱͷೋͭͷ਺ͷੵʹ౳͍͠ • 2਺ͷ࠷େެ໿਺ˡϢʔΫϦουͷޓআ๏
 func gcm(m: Int, n: Int) {
 if n == 0 {
 return m
 }
 if m < n {
 return gcd(n, m)
 }
 return gcd(n, m % n)
 }

Slide 29

Slide 29 text

·ͱΊ • UIScrollViewΛ̏ͭ૊Έ߹ΘͤΕ͹ɺλΠϜςʔϒϧ͸ ࣮૷Ͱ͖Δ • ζʔϜ΍ճసରԠ͸݁ߏେม • ͜ͷลΛϥΠϒϥϦʹऔΓࠐΉ͸Too much͔΋ • ηϧͷදࣔͷͤ͞ํΛ͍͍ײ͡ʹ͍ͨ͠ͱࢥ͍ͬͯͨΒɺ ͍ͭͷؒʹ͔ϢʔΫϦουͷޓআ๏Λ࣮૷͍ͯͨ͠