Slide 1

Slide 1 text

ΧδϡΞϧʹ͸͡ΊΔ7'- CBOKVO ",*#"TXJGUʷΤ΢ϨΧίʔυϨΠΞ΢τษڧձ 7JTVBM'PSNBU-BOHVBHF autolayout("H:|-[AKIBA][eureka]-|")

Slide 2

Slide 2 text

͹Μ͡ΎΜ!CBOKVO ࣗݾ঺հ 'MJDL4,,4,,ΩʔϘʔυ J04 -PWF-JWFSϥΠϒϑΥτੜ੒ NBD04 1IPUP4UVEJP1MBZFS
 ϥΠτχϯάΫϩϚΩʔΩϟϓνϟ NBD04 ࠷ۙࢀՃͨ͠ϋοΧιϯ
 ΞΠϚεϋοΧιϯɾϓϦύϥϋοΧιϯ

Slide 3

Slide 3 text

ίʔυϨΠΞ΢τ͍ͯ͠Δ !"

Slide 4

Slide 4 text

7'-Λ࢖͍ͬͯΔ !" "H:|-[AKIBA][eureka]-|" ˞7JTVBM'PSNBU-BOHVBHFŠ͜Μͳײ͡ͷ

Slide 5

Slide 5 text

7JTVBM'PSNBU-BOHVBHF "H:|-[AKIBA][eureka]-|" "QQMFͷ
 "VUP-BZPVU(VJEF
 ʹ΋ग़ͯ͘Δ

Slide 6

Slide 6 text

Α͘ݟ͔͚Δ7'- Will attempt to recover by breaking constraint ੍໿͕ίϯϑϦΫτͨ͠ͱ͖ͷίϯιʔϧϩά ςΩετίϛϡχέʔγϣϯ

Slide 7

Slide 7 text

J04͕࠷௿λʔήοτ࣌୅ʹBVUPMBZPVUಋೖ *#͸όʔδϣϯ؅ཧɾνʔϜ։ൃͭΒ͍ ίʔυϨΠΞ΢τΛࢼߦࡨޡͯ͠7'-࠾༻ 7'-पลͷϘΠϥʔϓϨʔτΛӅ͢ϥΠϒϥϦ࡞੒ 7'-Λ࢖͏͖͔͚ͬ

Slide 8

Slide 8 text

ʮ/PSUINFUIPEʯ͕ऩ࿥͞Ε͍ͯΔ$% 7'-ͷബ͍ϥούʔ ॳظWFSMJOFT ಠࣗͷϨΠΞ΢τख๏Λಋೖ͠ͳ͍ Ͱ͖Δ͚ͩ ͋͘·Ͱඪ४ػೳΛ࠷୹Ͱ࢖͏ͨΊ ଞͷ੍໿ͱ૊Έ߹ΘͤͰ͖Δ ໋໊͸QPEԽͨ͠ͱ͖ͷ
 ։ൃ߹॓ఱମͷϝιου੟஍८ྱ
 ʹ༝དྷ /PSUI-BZPVU

Slide 9

Slide 9 text

αϯϓϧ ˞࠷ۙ4BGF"SFBΛؾʹ͍ͯͨ͠ͷͰͦ͏͍͏ αϯϓϧΞχϝ ˞੍໿ࣗମ͸੩త

Slide 10

Slide 10 text

αϯϓϧ ˞࠷ۙ4BGF"SFBΛؾʹ͍ͯͨ͠ͷͰͦ͏͍͏ αϯϓϧΞχϝ ˞੍໿ࣗମ͸੩త

Slide 11

Slide 11 text

/PSUI-BZPVUͰॻ͘

Slide 12

Slide 12 text

pod "NorthLayout" window = UIWindow() window?.rootViewController = UINavigationController( rootViewController: ViewController( nibName: nil, bundle: nil)) window?.makeKeyAndVisible() didFinishLaunching

Slide 13

Slide 13 text

override func loadView() { super.loadView() let autolayout = northLayoutFormat(["p": 8], [ "icon": iconView, "name": nameLabel]) autolayout("H:|-p-[icon(==64)]") autolayout("H:|-p-[name]-p—|") autolayout("V:|-p—[icon(==64)]-p-[name]") } iconView nameLabel

Slide 14

Slide 14 text

(ϝτϦΫε, Ϗϡʔ໊ࣙॻ) -> (VFLจࣈྻ) -> Void northLayoutFormat: autolayout(…)

Slide 15

Slide 15 text

ϨΠΞ΢τ͸࣠Ͱॻ͘

Slide 16

Slide 16 text

ϨΠΞ΢τ͸࣠Ͱॻ͘

Slide 17

Slide 17 text

ϨΠΞ΢τ͸࣠Ͱॻ͘

Slide 18

Slide 18 text

ϨΠΞ΢τ͸࣠Ͱॻ͘ autolayout("H:|-[icon]-[name]-[date]-|") autolayout("H:|-[body]-|") autolayout("H:|-[nav]-[fav(==nav)]—|")

Slide 19

Slide 19 text

ϨΠΞ΢τ͸࣠Ͱॻ͘ autolayout("V:|-[icon]-[body]-[nav]") autolayout("V:|-[name(==icon)]-[body]-[fav(==nav)]") autolayout("V:|-[date]")

Slide 20

Slide 20 text

autolayout("H:|-[icon]-[name]-[date]-|") ඞཁͳ࣠ͷݸ਺7'-ͷจࣈྻͷ਺ ಡΈ΍͢͞Ͱ෼ׂͯ͠΋Α͍ ࣠ʹରͯ͠Ұ؏ੑͷ͋Δෳ਺ͷ੍໿Λੜ੒ MFGU SJHIUϛε΍ൈ͚͕ൃੜ͠ʹ͍͘ ϏϡʔೖΕସ͑΋؆୯ɺEJ⒎΋Θ͔Γ΍͍͢ ͜ͷྫͰ͸ྡ઀Ϗϡʔؒͷ੍໿ੜ੒

Slide 21

Slide 21 text

จࣈྻͷฐ֐ͷͱΒ͔͑ͨ "H:|-[ࣙॻʹͳ͍Ϗϡʔ໊]-|" "H:[ϋΠϑϯͷӈଆ͕ͳ͍]-" "H:[[͍Ζ͍Ζจ๏͕͓͔͍͠]]" ˠ࣮֬ʹΫϥογϡ ˠ Ұ౓ಈ͚͹0, 7'-Ҏ֎Ͱ΋ࠔ೉ͳ໋୊ ίϯύΠϧ͕௨ΔͳΒ͹੍໿͕ڝ߹͠ͳ͍ ίϯύΠϧ͕௨ΔͳΒ͹ϨΠΞ΢τ͕ҙਤ௨Γ

Slide 22

Slide 22 text

7'-ͱ4BGF"SFB 7'-͸4BGF"SFBهड़ෆՄೳ Ͱ΋7'-ͬΆ͘؆୯ʹॻ͖͍ͨ

Slide 23

Slide 23 text

autolayout("H:|[header]|") autolayout("H:||[icon]… ֦ு7'- ॎ๮ຊTVQFSWJFXڥք ॎ๮ຊϨΠΞ΢τϚʔδϯڥք 7'- ֦ு /&8 ϨΠΞ΢τϚʔδϯ͸4BGF"SFBΛߟྀ͢Δ ͞ΒʹJ1IPOF9Ҏ֎Ͱ΋༗ޮ

Slide 24

Slide 24 text

autolayout("H:|[header]|") autolayout("H:||[icon]… ֦ு7'- ॎ๮ຊ ॎ๮ຊ 7'- ֦ு /&8

Slide 25

Slide 25 text

https://github.com/kareman/FootlessParser/pull/10 https://github.com/kareman/FootlessParser/pull/11 ֦ு7'-ͷύʔεʹΉ͚ͯ kareman/FootlessParser

Slide 26

Slide 26 text

7'-ύʔαʔΛͭ͘Δ struct VFL { let orientation: Orientation let firstBound: (Bound, Connection)? let firstView: View let views: [(Connection, View)] var lastView: View {return views.last?.1 ?? firstView} let lastBound: (Connection, Bound)?

Slide 27

Slide 27 text

7'-ύʔαʔΛͭ͘Δ enum Orientation {case h, v} struct View { let name: String let predicateListWithParens: [Predicate] } enum Bound: String { case superview = "|" case layoutMargin = "||" } struct Connection { let predicateList: PredicateList }

Slide 28

Slide 28 text

7'-ύʔαʔΛͭ͘Δ enum PredicateList { case simplePredicate(SimplePredicate) case predicateListWithParens([Predicate]) } enum SimplePredicate { case metricName(MetricName) case positiveNumber(CGFloat) } enum Relation {case eq, le, ge} enum ObjectOfPredicate { case constant(Constant) case viewName(ViewName) }

Slide 29

Slide 29 text

7'-ύʔαʔΛͭ͘Δ enum Constant { case metricName(MetricName) case number(CGFloat) } enum Priority { case metricName(MetricName) case number(CGFloat) } struct Predicate { let relation: Relation? let objectOfPredicate: ObjectOfPredicate let priority: Priority? } }

Slide 30

Slide 30 text

autolayout("H:||[icon]… autolayout("H:[icon]… ڥք੍໿ͷ͢Γ͔͑ ϨΠΞ΢τϚʔδϯ΁ͷ੍໿

Slide 31

Slide 31 text

͖ͭͮ͸8FCͰ https://github.com/banjun/NorthLayout/pull/11

Slide 32

Slide 32 text

NBD04ΞϓϦͷϨΠΞ΢τ NBD04Ͱ΋BVUPMBZPVUͯ͠ΈΔͱָ͍͠ ը໘΍΢Πϯυ΢͕ઈରͰ͸ͳ͍ੈք ΢Πϯυ΢ϦαΠζΑΓڧ͍Ϗϡʔ͔ऑ͍Ϗϡʔ͔ .BJO4UPSZCPBSE͸࢒͢ͷ͕Φεεϝ
 /4.FOVͷͨΊ ࠷ॳ͸*OUFSGBDF#VJMEFSͷϚʔδϯͷΨΠυͰײ ֮௫Ήͷ͕ྑ͍͔΋ /PSUI-BZPVU͸J04NBD04ରԠͰ͢

Slide 33

Slide 33 text

autolayout("H:||[AKIBA][eureka]||")