Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UIViewとUITextInputで作る縦書きのTextView / Vertical Te...

cc4966
September 01, 2018

UIViewとUITextInputで作る縦書きのTextView / Vertical TextView based on UIView with UITextInput

iOSDC Japan 2018
2018/09/01 16:00〜 Track B レギュラートーク(15分)

UITextViewを使わずにUITextViewのようなViewを作ることで縦書きテキストエディタを作った話。

UITextViewのあの機能が実はUITextInput由来だったりといった話や、IME周りの挙動をAndroidやUWP, Windows / macOS / Gtkで同様の縦書きエディタを作った経験を交えてお話しします。

CfP: https://fortee.jp/iosdc-japan-2018/proposal/2323a68f-fcf5-42bd-8353-efc6fa583404

cc4966

September 01, 2018
Tweet

More Decks by cc4966

Other Decks in Programming

Transcript

  1. 0VUMJOF  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ  *.&"1*ͷ໾ׂʢJ04ʣ

     6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺ !4
  2. 0VUMJOF  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ  *.&"1*ͷ໾ׂʢJ04ʣ

     6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺ !5
  3. 0VUMJOF  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ  *.&"1*ͷ໾ׂʢJ04ʣ

     6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺ !11
  4. 5FYU7JFXͱ͸ʁ w 5FYU7JFXͰ͢΂͖͜ͱ w จࣈྻͷදࣔ w *.&ΩʔϘʔυ͔ΒͷςΩετೖྗΛड৴ w ͦͷଞͷࡉ͔͍ػೳ w

    จࣈྻͷબ୒ͱදࣔ w จࣈྻͷ੾ΓऔΓɾషΓ෇͚ͳͲͷฤूૢ࡞ w ฤूૢ࡞ͷΞϯυΡɾϦυΡ w දࣔൣғͷεΫϩʔϧ !19
  5. 0VUMJOF  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ  *.&"1*ͷ໾ׂʢJ04ʣ

     6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺ !21
  6. *.&"1*ͷ֓؍ w *.&"1*͕7JFXʹཁٻ͢Δͷ͸ w ςΩετͷऔಘͱมߋ w બ୒ൣғͷऔಘͱมߋ w 7JFX্ͰͷจࣈͷҐஔ৘ใ w

    ະ֬ఆจࣈྻͷ؅ཧʢྫɿεΫγϣͷʮม׵ʯ͕ະ֬ఆจࣈྻʣ w 7JFXʹΑΔςΩετɾબ୒ൣғɾϨΠΞ΢τมߋͷ௨஌ !27
  7. *.&"1*ͷҰཡ !28 *.&"1*ͷ໊শ 7JFXଆ 
 ඪ४࣮૷ ॎॻ͖ରԠ
 ʢॎॻ͖Ͱ͋ΔࣄΛ఻͑Δํ๏ʣ ίϝϯτ 8JOEPXT

    *5FYU4UPSF"$1
 .4'5&%*5@$-"44 ͋Γ ೉ղ͚ͩͲߴػೳ NBD04 /45FYU*OQVU$MJFOU
 /45FYU7JFX ͋Γ BUUSJCVUFE4USJOH ͕ͭΒ͍ (5, (UL*.$POUFYU (UL5FYU7JFX ͋Γ(ULҎ߱
 ʢͨͩ͠ରԠ*.&͕ͳ͍ؾ͕͢Δʣ ΍͚ʹυΩϡϝϯτ͕গͳ͍ "OESPJE #BTF*OQVU$POOFDUJPO
 5FYU7JFX ෆՄೳͰ͸ͳ͍͸ͣ
 ʢ$VSTPS"ODIPS*OGPͷTFU.BUSJYʣ ᴈ໌ظͷҋ͕֞ؒݟ͑Δ 681 8JOEPXT6*5FYU$PSF
 5FYU#PY ͳ͠ ॎॻ͖͕͋Ε͹ʜʜ J04 6*5FYU*OQVU
 6*5FYU7JFX ͳ͍ͷͱಉ͡ 6*5FYU1PTJUJPO͸ૉ੖Β͍͠
  8. จࣈΛೖྗ͢Δ w ਓ͕ؒΩʔϘʔυ͔ΒจࣈΛೖྗ͢Δࡍͷϧʔϓ  ਓ͕ؒΩʔϘʔυΛୟ͘  *.&͕ΩʔίʔυΛड͚औΔ  *.&͕ΞϓϦʹ֬ఆͨ͠ςΩετ·ͨ͸ະ֬ఆจࣈྻΛ౉͢ 

    ΞϓϦ͕*.&͔ΒจࣈྻΛड͚औΔ  ΞϓϦ͕ݱࡏͷςΩετΛσΟεϓϨΠʹදࣔ͢Δ  *.&͕ඞཁͳม׵ީิ΢Οϯυ΢ͳͲΛσΟεϓϨΠʹදࣔ͢Δ  ਓ͕ؒσΟεϓϨΠΛݟΔ !29
  9. 0VUMJOF  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ  *.&"1*ͷ໾ׂʢJ04ʣ

     6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺ !30
  10. ΩʔϘʔυͷൺֱ !34 ඪ४ΩʔϘʔυ ඪ४ΩʔϘʔυ ʢ෺ཧΩʔϘʔυϞʔυʣ ΧελϜΩʔϘʔυ จࣈྻͷૠೖ Մೳ Մೳ Մೳ

    จࣈྻૠೖҐஔͷҠಈ Մೳ Մೳ Մೳ จࣈྻͷ࡟আ ແ੍ݶ ແ੍ݶ CBDLTQBDFͷΈ จࣈྻͷऔಘ ແ੍ݶ ແ੍ݶ બ୒ൣғલޙͷจࣈྻͷΈ จࣈྻͷબ୒ Մೳ Մೳ ෆՄೳ ະ֬ఆจࣈྻͷදࣔ Մೳ Մೳ ෆՄೳ ύεϫʔυೖྗͰͷ࢖༻ Մೳ Մೳ ෆՄೳ ϑϩʔςΟϯάΩϟϨοτ Մೳ ෆՄೳ ෆՄೳ Ի੠ೖྗ݁Ռͷఏڙ Մೳ ෆՄೳ ෆՄೳ
  11. 0VUMJOF  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ  *.&"1*ͷ໾ׂʢJ04ʣ

     6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺ !36
  12. બ୒ൣғͷදࣔ w 6*5FYU4FMFDUJPO7JFX w 6*5FYU3BOHF7JFX w ࠷ॳ࠷ޙͦΕҎ֎ͷߦͷ࠷େͭ ͷ൒ಁ໌ͳ6*7JFX w બ୒ͷઌ಄ͱ຤ඌʹθϩ෯ͷ6*7JFX

    w 6*4FMFDUJPO(SBCCFSºͷॎ๮ w 6*4FMFDUJPO(SBCCFS%PUºͷؙ w ͜ΕΒͷ৭͸UJOU$PMPSʹै͏ w ςΩετͷඳը݁Ռʹ͸ׯব͠ͳ͍ͷͰબ ୒தͷจࣈ৭Λม͑Δ͜ͱ͸Ͱ͖ͳ͍ !42 ࣮૷Մೳ
  13. 6*5FYU7JFXͷػೳ w ҎԼͷૢ࡞ͰΞϯυΡɾϦυΡ͕Ͱ͖Δ w ΩʔϘʔυ্ͷඪ४Ϙλϯ w J1BEͰͷΈදࣔ͞ΕΔ w ୺຤ͷγΣΠΫ w

    ઃఆʼΞΫηγϏϦςΟʼγΣΠΫͰ औΓফ͕͠ΦϯͳΒ w $PNNBOE ;$PNNBOE 4IJGU ; w ෺ཧΩʔϘʔυ͔Β !55
  14. 0VUMJOF !62  ॎॻ͖ͷ5FYU7JFX͸6*7JFX 6*5FYU*OQVUͰ࡞ΕΔ  ͦ΋ͦ΋5FYU7JFXͱ͸ʁ  *.&"1*ͷ໾ׂ 

    *.&"1*ͷ໾ׂʢJ04ʣ  6*5FYU7JFXͰͰ͖Δ͜ͱͱͦͷ࣮૷  J04Ͱॎॻ͖ͷ5FYU7JFXΛ࡞Δࡍͷ஫ҙ఺
  15. 6*7JFX 6*5FYU*OQVU w جຊతʹ͸6*7JFXͰ6*5FYU*OQVUΛܧঝ࣮ͯ͠૷͢Δ͚ͩ w ॎॻ͖Ͱ΋ͳΜͰ΋޷͖ͳ5FYU7JFXΛ࡞Δ͜ͱ͕Մೳ w ͦΕҎ֎Ͱ๨Εͯ͸͍͚ͳ͍͜ͱ w DBO#FDPNF'JSTU3FTQPOEFS6*3FTQPOEFSͰUSVFΛฦ͢

    w *.&ͷͨΊʹJOQVU%FMFHBUFͰςΩετ΍બ୒ൣғͷมߋΛ௨஌͢Δ w ਓؒͷͨΊʹςΩετΛදࣔͯ͋͛͠Δ w ਓؒͷͨΊʹςΩετͷจࣈྻͷબ୒6*Λ༻ҙ͢Δ !63
  16. 6*5FYU*OQVUͷ࣮૷ w 6*5FYU*OQVU5PLFOJ[FS w จࣈɾ୯ޠɾจষɾߦͳͲͷڥք΁ͷΞΫηεΛఏڙ͢Δ w ࢖ΘΕΔλΠϛϯά w ඪ४ΩʔϘʔυͰߴ଎ʹҠಈ͢Δͱ͖ w

    ΧελϜΩʔϘʔυ͔Β6*5FYU%PDVNFOU1SPYZܦ༝ͰલޙͷςΩε τʹΞΫηε͢Δͱ͖ w 6*5FYU*OQVU4USJOH5PLFOJ[FS͕ඪ४ͷ࣮૷ !65
  17. 6*5FYU*OQVUͷ஫ҙ఺ w J04͸ະ֬ఆจࣈྻͷ૷০৘ใ͸*.&͔Βࢦఆ͞Εͳ͍ w NBSLFE5FYU4UZMF3FRVJSFE w ະ֬ఆจࣈྻͷ૷০৘ใ͕౉͞ΕΔϓϩύςΟ w ࢖༻͞ΕΔ4UZMF%JDUJPOBSZ,FZT͕શͯEFQSFDBUFEͳͷͰ࣮࣭ EFQSFDBUFE

    w ະ֬ఆจࣈྻͷ૷০͸7JFXଆ͕೚ҙʹߦ͏ w ϔομʔϑΝΠϧʹVOJRVFʹදࣔ͠Ζͱॻ͔Ε͍ͯΔ w ͪͳΈʹɺ૷০৘ใ͕ࢦఆ͞Εͳ͍ͷ͸J04͚ͩ !67
  18. ·ͱΊ w ఻͔͑ͨͬͨ͜ͱ w 5FYU7JFX͸ςΩετೖྗΛड͚෇͚Δ7JFXͰ͋Δ͜ͱ w J04ͷ6*5FYU7JFX͸ࣗ࡞Ͱ͖Δͱ͍͏͜ͱ w ॎॻ͖ͷ5FYU7JFXΛJ04Ͱ࡞Δͱ͖ʹؾΛ͚ͭΔ͜ͱ w

    ࿩ͨ͜͠ͱ w 7JFXͱ*.&"1*ͷؔ܎ɺςΩετΛड͚औΔʹ͸ w J04ͷΩʔϘʔυࣄ৘ʢΩʔϘʔυ㲈*.&ʣ w 6*5FYU7JFXͷػೳಉ౳ͳػೳͷ࣮૷ํ๏ w ॎॻ͖ͷ5FYU7JFXΛJ04Ͱ࡞ΔࡍͷྲྀΕ !70