「Goodpatch Engineer Meetup Vol.3 エンジニア目線で考えるデザイン」で発表したスライドの公開版です。
https://goodpatch.connpass.com/event/56973/
ϢʔβʔΠϯλʔϑΣΠεղֶGoodpatch Engineer Meetup Vol.3 ΤϯδχΞઢͰߟ͑ΔσβΠϯ2017.6.7© 2017 Satori MARU.ެ։൛
View Slide
@usagimaru / @usagimarumaؙ ྯ ཬ· Δ ͞ ͱ ΓiOS DeveloperDesign Div. Goodpatch Inc.
ϢʔβʔΠϯλʔϑΣΠεʹ͍ͭͯߟ͑ɺݴޠԽͨ͠ΓͳͲ
medium.com/usagimaru
qiita.com/usagimaru
goodpatch.com/blog/dialog-design
ϢʔβʔΠϯλʔϑΣΠεʹͩ͜ΘͬͨΞϓϦέʔγϣϯ։ൃ
JINS MEMEʹΑΓ ूதྗ ΛՄࢹԽJINS Inc.v1https://jins-meme.com/ja/office/
Ո͔ΒফඅऀࡊͱѪΛಧ͚ΔσϦόϦʔɾαʔϏεגࣜձࣾϕδΦϕδίiOS / ʙ1.0.1http://vegeryorganics.com
ຊͷܳͱ࢈ͷັྗΛൃ৴͢ΔܳϝσΟΞɾཱྀͷ͓ͱΞϓϦגࣜձࣾதࣣళhttps://sunchi.jp/app
UIίϯϙʔωϯτͷ࣮
ࣗ࡞ vs. UIϥΠϒϥϦ
։ൃ࣌ؒΛॖͰ͖ΔUIҎ֎ʹྗͰ͖ΔUIϥΠϒϥϦ
͍͍ͨͯҙਤͨ͠ಈ͖ʹͳΒͳ͍UIϥΠϒϥϦ OSΞοϓσʔτͷਵґଘؔΛ੍ޚͮ͠Β͍UIϥΠϒϥϦͷઃܭʹ߹Θͤͳ͚ΕͳΒͳ͍
v1
ຊࢿྉͰׂѪ
Ξχϝʔγϣϯʹ߹ΘͤͯTaptic EngineʹΑΔ৮֮ϑΟʔυόοΫΛ࣮
https://github.com/usagimaru/TanzakuiOS͚ॎॻ͖ϥϕϧΛࣗ࡞͠·ͨ͠
ϢʔβʔΠϯλʔϑΣΠεΛ͖ͪΜͱσβΠϯ͢ΔͳΒͬͺΓࣗ࡞ͯ͠͠·͏ͷ͕ྑ͍
ϢʔβʔΠϯλʔϑΣΠεΛཧղ͢Δ
ඃࣸମͷଆΛཧղ͢Δ͜ͱͰɺֆըΛඒ͘͠ඳ͘ϨΦφϧυɾμɾϰΟϯν
ϢʔβʔΠϯλʔϑΣΠεͷଆΛཧղ͢Δ͜ͱͰɺඒ͍͠ϓϩμΫτΛ࡞ΕΔͣ
ϢʔβʔΠϯλʔϑΣΠεͷΈmacOS/iOS͔ΒֶͿ
HIGͷ͞ΒʹԞΛ୳ͬͯΈΔ͜ͱͰͦͷߏΛཧղ͢Δ
Ϣʔβʔʹ͍ۙͷؙ͍֊ߏϞʔυ vs. ϞʔυϨε
֯R͔ΒಡΈղ͘iOSͷUIσβΠϯϢʔβʔͱͷڑͱʮؙ͞ʯ
ؙ͍Appleͷؙ֯
Ϣʔβʔͱͷڑͱؙ֯ϚεͰૢ࡞ صʹஔ͘ ʹண ࣖʹணϦϞίϯૢ࡞ ยखͰ࣋ͭ
?
iOSͷ֯RͷҙຯΛߟͯ͠ΈΑ͏
ΞϓϦΞϓϦͷQuick ActionϝχϡʔΟδΣοτ௨όφʔ֯R͕Ұக͍ͯ͠Δ
ΞϓϦ ʹ ௨όφʔ ʹ ΟδΣοτ֯RͷҰக͔ΒΘ͔Δ͜ͱ…
গͳ͘ͱΞϓϦͷRͱҰக͍ͯ͠ΔͷಉଐੑͬΆ͍
ු༡ΦϒδΣΫτͷؙ͍֯Ϣʔβʔʹ͍ۙͷු༡͍ͯ͠ΔϢʔβʔʹ͍ۙͷؙ͍Μ͡ΌͶ
Ϣʔβʔଆ
UIͷ֊ߏɺϢʔβʔͱͷڑɺૢ࡞ମܥͱͷ͕ؔ֯RͷσβΠϯ͔Βݟ͖͑ͯͨ
Cascading ListͱUIͷ֊ߏ
UINavigationController
NeXTSTEP ※ΠϝʔδGNUstep
iPod
Finder Font Panel
Cascading Listཻ͝ͱʹใΛ֊Խ͢ΔͨΊͷͷ
ϓογϡભҠͰͲͷΑ͏ʹใΛஔ͖͔͢Λཧղ͢Δ͜ͱ͕Ͱ͖Δ
iOS “Mail” Λղͯ͠ΈΔUIͷ֊ߏ
#ui-dangi
લͷϏϡʔ͕ཪʹݟ͍͑ͯΔඪ४෦Ͱ͋Γ͑ͳ͍ϞʔμϧϏϡʔԼʹυϥοάͰ͖ͦ͏ײ͕͋Δ
ϝοηʔδϏϡʔΛυϥοά͢Δͱ࠷ԼʹελοΫ͞ΕΔάϩʔόϧྖҬʹελοΫඪ४෦Ͱ͋Γ͑ͳ͍
ͳͥʁάϩʔόϧྖҬʹελοΫඪ४෦Ͱ͋Γ͑ͳ͍
SafariͷλϒҰཡͱಉ͜͡Εඪ४෦Ͱͳ͍
ͳͥʁ
macOSʹώϯτ
ͦͦɺλϒͬͯͳΜͩΖ͏ʁ
λϒΠϯυ͕มԽͨ࢟͠×
λϒΠϯυʹ෮ݩͰ͖Δ
ʹ
“Mail” ϚϧνΠϯυUIΛදͨ͢Ίʹ͋͑ͯΧελϜUIΛ༻͍ͯͦΕΛ࣮ݱʮApple ͛͢ʔͳʔʯ
ϞʔυϞʔυ vs. ϞʔυϨε
͍Βͬ͠Ό͍·ͤళɹϘλϯ͓࣋ͪؼΓϘλϯຊޠ English தจ ೠҴয ͓ͭΓΔ0ԁڇကͷ৯݊ػͬͯ͜Μͳ෩ʹͳͬͯΔ͚Ͳ……
બબ࣋ͪؼΓϞʔυళϞʔυ ܾࡁܾࡁڇကͷ৯݊ػͷUIϑϩʔͱͯλεΫࢦ։࢝·ͣλεΫΛݶఆͤ͞Δ ΦϒδΣΫτΛબͿ
બબ࣋ͪؼΓϞʔυళϞʔυ ܾࡁܾࡁ× ×બதʹϞʔυͷΓସ͕͑Ͱ͖ͳ͍ϑϩʔ։࢝Ұ୴தࢭͯ࢝͠ΊʹΔλεΫΛબͼ͔ͯ͠Βಉ͜͡ͱΛΓ͢
બબ࣋ͪؼΓϞʔυళϞʔυ ܾࡁܾࡁ× ×ళϞʔυ͔Β࣋ͪؼΓϞʔυʹҠߦ͢ΔʹશͯΛ์غͯ࢝͠ΊʹΒͳ͚ΕͳΒͳ͍ͷͰɺૢ࡞ͮ͠Β͍։࢝
Ϟʔυ֊Ϟʔυ vs. ϞʔυϨε
ిݯೖੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅ
ిݯೖOSىಈϩοΫը໘ϗʔϜΞϓϦىಈੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅ
ిݯೖOSىಈϩοΫը໘ϗʔϜΞϓϦىಈϞʔμϧϏϡʔ ด͡ΔੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅ
ిݯೖOSىಈϩοΫը໘ϗʔϜΞϓϦىಈ ϗʔϜϘλϯϞʔμϧϏϡʔ ด͡ΔੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅ
ిݯೖOSىಈϩοΫը໘ϗʔϜΞϓϦىಈ ϗʔϜϘλϯϞʔμϧϏϡʔ ด͡ΔੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅεϦʔϓ / ϩοΫOSऴྃ
ిݯೖOSىಈϩοΫը໘ϗʔϜΞϓϦىಈ ϗʔϜϘλϯϞʔμϧϏϡʔ ด͡ΔੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅεϦʔϓ / ϩοΫOSऴྃΞϓϦΛ͏·Ͱʹੵ·Ε͍ͯΔϞʔυ
ిݯೖOSىಈϩοΫը໘ϗʔϜΞϓϦىಈ ϗʔϜϘλϯϞʔμϧϏϡʔ ด͡ΔੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫిݯஅεϦʔϓ / ϩοΫOSऴྃϢʔβʔ͕ओʹҙࣝ͢ΔϞʔυ
ϩοΫը໘ϗʔϜΞϓϦىಈ ϗʔϜϘλϯϞʔμϧϏϡʔ ด͡ΔੵΈ্͛ΒΕͨϞʔυ֊ɿiPhoneͷྫεϦʔϓ / ϩοΫϢʔβʔ͕ʮϗʔϜʯͷ্ͰϞʔυϨεʹৼΔ͑Δ͜ͱ͕ॏཁγεςϜ͕ੜΈग़͢ϞʔυɺϢʔβʔͷߦಈͱࢥߟΛ੍ݶͯ͠͠·͏
ʮϗʔϜʯʹग़͢Δ།ҰͷखஈΞϓϦ͕ੜΈग़͢Ϟʔυ͔Β͍ͭͰʮϗʔϜʯʹΔ͜ͱ͕Ͱ͖Δ
ϞʔμϧϏϡʔ͔Βग़͢Δखஈ͕ඞཁ
ϞʔυΛσβΠϯ͢Δ߹Ϟʔυ͔Βग़͢ΔखஈΛඞͣఏڙ͢Δ
ϞʔυΛੵΈ͗͢ͳ͍Α͏ʹUIΛσβΠϯ͢Δ
MacͷσεΫτοϓɾΠϯλʔϑΣΠεϞʔυ vs. ϞʔυϨε
UIϨΠϠʔߏखલ͔Βॱʹ͞ΕΔ21543 ͜ͷதͰ࠷Լ
ϑΥʔΧε͕͍ͨͬͯΔ෦ ʹ ͍ͯ͠ΔΦϒδΣΫτ
First Responder ͱ“໊ࢺˠಈࢺ”ͷૢ࡞ମܥϞʔυϨεΛ࣮ݱ͢ΔͨΊͷΈ
First ResponderΦϒδΣΫτʹΠϕϯτ͕ૹΒΕΔબ͍ͯ͠ΔΦϒδΣΫτͷ͏ͪɺ࠷લ໘ʹ͋Δͷ
໊শະઃఆϑΥϧμ ໊শະઃఆ.txt Safari.app
໊শະઃఆϑΥϧμ ໊শະઃఆ.txt Safari.appFirst ResponderΠϝʔδͰ͢
໊শະઃఆϑΥϧμ ໊শະઃఆ.txt Safari.appFirst ResponderΦϒδΣΫτΛબ͠ɺΞΫγϣϯΛ࣮ߦ͢Δvar firstResponder = "໊শະઃఆϑΥϧμ"open(firstResponder)ΠϝʔδͰ͢ίʔυͩͱ͜ΜͳΠϝʔδ
໊শະઃఆϑΥϧμ ໊শະઃఆ.txt Safari.appFirst ResponderͲͷΦϒδΣΫτͰಉ͡ΞΫγϣϯvar firstResponder = "໊শະઃఆ.txt"open(firstResponder)ΠϝʔδͰ͢
໊শະઃఆϑΥϧμ ໊শະઃఆ.txt Safari.appFirst ResponderෳΛͻͱ·ͱΊͷΦϒδΣΫτͱͯ͠ѻ͏var firstResponder = ["໊শະઃఆϑΥϧμ", "໊শະઃఆ.txt", "Safari.app"]open(firstResponder)ΠϝʔδͰ͢
ΦϒδΣΫτʹର࣮ͯ͠ߦՄೳͳίϚϯυूΞϓϦ͕࣋ͭͯ͢ͷίϚϯυϝχϡʔόʔʹऩ·͍ͬͯΔ
ใΛݟΔϑΥϧμ໊ࢺ ಈࢺ
໊ࢺಈࢺ$ cd /SystemCUI
$ cd /SystemϝχϡʔόʔͰίϚϯυҰཡΛ၆ᛌͰ͖Δ͕ɺCUIͰίϚϯυΛ֮͑Δඞཁ͕͋ΔCUI
$ cd /Systemಛఆͷߦಈʹ੍͞ΕΔʹϞʔυ͕͋ΔCUI
GUIબͨ͠ޙͷߦಈҙʹϞʔυϨεͰ͋Δ
Responder ChainϞʔυϨεΛ࣮ݱ͢ΔͨΊͷΈ
Responder = ΠϕϯτΛड͚औΔΦϒδΣΫτ
ͯ͢ͷϏϡʔresponderͰ͋ΔϏϡʔೖΕࢠߏΛ࡞Δࢠ͔ΒresponderΛḷΔඞཁ͕͋ΔResponder ChainΠϕϯτୡͷͨΊͷCocoaͷΈ
WindowCustomViewTextFieldEventeventeventeventmouseDownResponder ChainmouseDown()ςΩετೖྗͪಛʹͳ͠ΞΫςΟϒԽ
macOSͰ͜ͷΑ͏ͳΈͰϞʔυϨεͳૢ࡞ମܥ͕࣮ݱ͞Ε͍ͯΔ
͍ۙσόΠε ԕ͍σόΠε֊ ཻϞʔυϨε Ϟʔυ…
༏ΕͨϓϩμΫτΛղ͢Δ͜ͱͰσβΠϯͷҙຯ͕Θ͔Δ
ྑ͍ϓϩμΫτΛੜΈग़ͨ͢Ίʹσϕϩούʔ͕ͦ͜ϢʔβʔΠϯλʔϑΣΠεͷΈΛཧղ͠ͳ͚ΕͳΒͳ͍
ϢʔβʔΠϯλʔϑΣΠεͬͯ໘ന͍ੈքͰ͢Ͷ