$30 off During Our Annual Pro Sale. View Details »

iosdc2018.pdf

 iosdc2018.pdf

iosdc2018でLTをしたときのアクセシビリティについての資料です。

[email protected]

September 01, 2018
Tweet

Other Decks in Programming

Transcript

  1. Πν͔Β࢝ΊΔ
    ΞΫηγϏϦςΟ
    J04%$

    TIJ[ ͣ͠
    !TU[O
    d·ͣ͸Ͱ͖Δͱ͜Ζ͔Βd

    View Slide

  2. ࣗݾ঺հ
    ߴా৽ࢁ 5BLBUB4IJO[BO
    4IJ[ ͣ͠

    גࣜձࣾΦϑΟεࠏ
    ϞόΠϧ͔ΒΠϯϑϥ·Ͱ΍Δ

    ࡶଟͳΤϯδχΞ

    4XJGU "OESPJE LPUMJO
    "OHVMBS /PEFKT $ 1)1 +BWB

    J04ΤϯδχΞ໨ࢦ͍ͯ͠·͢

    View Slide

  3. ຊ೔ͷςʔϚ͸
    ΞΫηγϏϦςΟ

    View Slide

  4. ΞΫηγϏϦςΟ
    ͬͯʁ

    View Slide

  5. ํ๏ͱঢ়گʹΑΒͣ
    ୭΋͕৘ใΛ
    ౳͘͠औಘͰ͖Δ͜ͱ

    View Slide

  6. ୭ʹͱͬͯʁ

    View Slide

  7. ΞΫηγϏϦςΟͬͯ
    Կ͔ಛผͳ΋ͷʁ

    View Slide

  8. ྫ͑͹

    View Slide

  9. ి೾͕ೖΒͳ͍….

    View Slide

  10. ࿹͕࢖͑ͳ͍….

    View Slide

  11. δϣΪϯάத
    ӡసத
    ຬһిंͷத ଠཅ͕রΓ͚ͭΔ೔தͷ֎
    ΠϠϗϯ๨ΕͯԻ͕ฉ͚ͳ͍
    ը໘͕όΩόΩ
    ՙ෺Ͱ྆ख͕;͕͍ͬͯ͞Δ
    ௨ৗͷૢ࡞͕ࠔ೉ͳঢ়گ

    View Slide

  12. ΞΫηγϏϦςΟ͸
    ୭ʹͰ΋ඞཁͳ΋ͷ

    View Slide

  13. Ͳ͏΍ͬͯ
    ΞΫηγϒϧʹ͢Δʁ

    View Slide

  14. J04)VNBO*OUFSGBDFHVJEFMJOFT
    )*(

    IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTJPTBQQ
    BSDIJUFDUVSFBDDFTTJCJMJUZ

    View Slide

  15. υΩϡϝϯτ
    IUUQTEFWFMPQFSBQQMFDPNBDDFTTJCJMJUZ

    View Slide

  16. ۩ମతͳػೳ̎ͭ঺հ

    View Slide

  17. %ZOBNJD5ZQF

    View Slide

  18. View Slide

  19. View Slide

  20. Ϣʔβͷઃఆʹ߹Θͤͯ
    จࣈͷେ͖͕͞มΘΔ

    View Slide

  21. ઃఆ͔ΒจࣈαΠζΛมߋ

    View Slide

  22. ΞΫηγϏϦςΟػೳͰ
    ͞Βʹେ͖ͳจࣈ

    View Slide

  23. 5FYU4UZMFΛબͿ
    νΣοΫΛ͚ͭΔ

    View Slide

  24. QSJWBUFMFUVTFS/BNF6*-BCFM

    VTFS/BNFGPOU6*'POUQSFGFSSFE'POU GPS5FYU4UZMFUJUMF

    VTFS/BNFBEKVTUT'POU'PS$POUFOU4J[F$BUFHPSZUSVF
    จࣈͷେ͖͕͞มΘΔ

    View Slide

  25. FYUSB4NBMM FYUSB&YUSB&YUSB-BSHF

    View Slide

  26. BDDFTTJCJMJUZ.FEJVN
    BDDFTTJCJMJUZ&YUSB&YUSB&YUSB-BSHF

    View Slide

  27. %ZOBNJD5ZQF4J[FT
    4UZMF 8FJHIU Y4NBMM 4NBMM .FEJVN -BSHF Y-BSHF YY-BSHF YYY-BSHF
    -BSHF5JUMF 3FHVMBS
    5JUMF 3FHVMBS
    5JUMF 3FHVMBS
    5JUMF 3FHVMBS
    )FBEMJOF 4FNJ#PME
    #PEZ 3FHVMBS
    $BMMPVU 3FHVMBS
    4VCIFBE 3FHVMBS
    'PPUOPUF 3FHVMBS
    $BQUJPO 3FHVMBS
    $BQUJPO 3FHVMBS
    ϑΥϯτ͸4BO'SBODJTDP

    View Slide

  28. -BSHFS"DDFTTJCJMJUZ5ZQF4J[FT
    4UZMF 8FJHIU "9 "9 "9 "9 "9
    -BSHF5JUMF 3FHVMBS
    5JUMF 3FHVMBS
    5JUMF 3FHVMBS
    5JUMF 3FHVMBS
    )FBEMJOF 4FNJ#PME
    #PEZ 3FHVMBS
    $BMMPVU 3FHVMBS
    4VCIFBE 3FHVMBS
    'PPUOPUF 3FHVMBS
    $BQUJPO 3FHVMBS
    $BQUJPO 3FHVMBS
    ϑΥϯτ͸4BO'SBODJTDP

    View Slide

  29. J04͔ΒΧελϜϑΥϯτʹ΋ରԠ
    8FC7JFXͰ΋ར༻Մೳ
    QSJWBUFMFUDPOUFOU6*-BCFM

    JGMFUGPOU6*'POU OBNF/PUFXPSUIZ TJ[F
    \
    DPOUFOUGPOU6*'POU.FUSJDTEFGBVMUTDBMFE'POU GPSGPOU

    ^
    DPOUFOUBEKVTUT'POU'PS$POUFOU4J[F$BUFHPSZUSVF
    CPEZ\
    GPOUBQQMFTZTUFNCPEZ"QQMFσόΠεͷΈར༻Մೳ
    ^I\
    GPOUTJ[FSFN
    ^

    View Slide

  30. ϨΠΞ΢τ่͕ΕΔ͜ͱ͕͋Δ
    QSJWBUFMFUEBUF6*-BCFM

    EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU FRVBM5P
    VTFS/BNFMBTU#BTFMJOF"ODIPS DPOTUBOU

    View Slide

  31. QSJWBUFMFUEBUF6*-BCFM

    EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU&RVBM5P4ZTUFN4QBDJOH#FMPX
    VTFS/BNFMBTU#BTFMJOF"ODIPS NVMUJQMJFS

    εϖʔεΛࣗಈͰௐ੔ͯ͘͠ΕΔ

    View Slide

  32. 7FSUJDBM#BTFMJOF4UBOEBSE4QBDJOHΛ࢖༻͢Δ

    View Slide

  33. QSJWBUFMFUEBUF6*-BCFM

    EBUFUPQ"ODIPSDPOTUSBJOU FRVBM5PVTFS/BNFCPUUPN"ODIPS DPOTUBOU

    ͜Ε͸0,"
    ࣮͸#BTFMJOFͰ੍໿͠ͳ͚Ε͹0,ͩͬͨΓ͢Δ

    View Slide

  34. override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    let isAccessibilityCategory =
    traitCollection.preferredContentSizeCategory.isAccessibilityCategory
    if isAccessibilityCategory !=
    previousTraitCollection?.preferredContentSizeCategory.isAccessibilityCategory {
    updateLayoutContraints()
    }
    }
    ΞΫηγϏϦςΟͷઃఆΛΩϟονͰ͖Δ
    จࣈαΠζͷઃఆʹ߹ΘͤͯશͯͷཁૉΛਨ௚ʹϨΠΞ΢τ

    View Slide

  35. GSBNFPSJHJOZ
    6*'POU.FUSJDTEFGBVMUTDBMFE7BMVF GPS

    ઃఆʹ߹ΘͤͯจࣈͷαΠζ΋ಈతʹऔಘͰ͖Δ
    खಈͰઃఆ͍ͯ͠Δ৔߹
    σϑΥϧτQU͔ΒઃఆʹԠͯ͡มԽ͢Δ

    View Slide

  36. 5BCMF7JFX$FMMʹ੍໿Λઃఆ
    wจࣈͷେ͖͞ʹΑͬͯηϧͷߴ͕͞ม
    ΘΔͷͰTFMGTJ[JOH͕ඞཁ
    w J04
    ඪ४ͷ6*5BCMF7JFX$FMMΛ࢖༻
    ͍ͯ͠Δ৔߹ɺࣗಈͰௐ੔ͯ͘͠ΕΔ
    wηϧͷߴ͞Λݻఆʹઃఆɺ·ͨ͸*#Λ
    ࢖༻͍ͯ͠Δ৔߹ɺௐ੔͕ඞཁ

    View Slide

  37. QSJWBUFMFUEBUF6*-BCFM

    EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU&RVBM5P4ZTUFN4QBDJOH#FMPX
    VTFS/BNFMBTU#BTFMJOF"ODIPS NVMUJQMJFS

    "VUP-BZPVUΛ࢖༻͍ͯ͠Δ৔߹
    QSJWBUFMFUEBUF6*-BCFM

    EBUFUPQ"ODIPSDPOTUSBJOU FRVBM5PVTFS/BNFCPUUPN"ODIPS DPOTUBOU

    View Slide

  38. MFUNBSHJO$('MPBU
    PWFSSJEFGVODTJ[F5IBU'JUT @TJ[F$(4J[F
    $(4J[F\
    MFUVTFS4J[FVTFS/BNFTJ[F5IBU'JUT $(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUHSFBUFTU'JOJUF.BHOJUVEF


    MFUEBUF4J[FEBUFTJ[F5IBU'JUT $(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUHSFBUFTU'JOJUF.BHOJUVEF


    MFUDPOUFOU4J[FDPOUFOUTJ[F5IBU'JUT $(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUHSFBUFTU'JOJUF.BHOJUVEF


    SFUVSO$(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUVTFS4J[FIFJHIUEBUF4J[FIFJHIUDPOUFOU4J[FIFJHIUNBSHJO

    ^
    TJ[F5IBU'JUTΛPWFSSJEFͯ͠ߴ͞Λઃఆ
    DPOUFOU7JFXCPVOETTJ[FXJEUIͰԣ෯Λऔಘ
    "VUP-BZPVUΛ࢖༻͍ͯ͠ͳ͍৔߹

    View Slide

  39. *NBHF΋%ZOBNJD5ZQFʹରԠͰ͖Δ

    View Slide

  40. 1%'ͰYͷը૾Λ༻ҙ͢Δ
    νΣοΫΛ͚ͭΔ

    View Slide

  41. QSJWBUFMFUXFBUIFS*NBHF6**NBHF7JFX

    XFBUIFS*NBHFBEKVTUT*NBHF4J[F'PS"DDFTTJCJMJUZ$POUFOU4J[F$BUFHPSZUSVF

    View Slide

  42. νΣοΫΛ͚ͭΔ

    View Slide

  43. ֬ೝํ๏

    View Slide

  44. "DDFTTJCJMJUZ*OTQFDUPS
    มߋʹԠͯ͡γϛϡϨʔλ΍࣮ػͷจࣈαΠζ΋มΘΔ

    View Slide

  45. 3VO"VEJU
    ରԠ͍ͯ͠ͳ͍ཁૉΛ֬ೝͰ͖Δ

    View Slide

  46. 7PJDF0WFS

    View Slide

  47. δΣενϟʔͰૢ࡞͢
    Δը໘ಡΈ্͛ػೳ

    View Slide

  48. Ç
    Ç

    View Slide

  49. ࠨ΍͡Δ͠Ϙλϯ

    View Slide

  50. ࠨ໼ҹϘλϯʁ

    View Slide

  51. 6*"DDFTTJCJMJUZ
    BDDFTTJCJMJUZ-BCFM
    BDDFTTJCJMJUZ'SBNF
    BDDFTTJCJMJUZ5SBJUT
    BDDFTTJCJMJUZ7BMVF
    BDDFTTJCJMJUZ)JOU
    6*7JFX

    View Slide

  52. private var backButton = UIButton()
    backButton.accessibilityTraits
    = UIAccessibilityTraitButton
    backButton.accessibilityLabel = "໭Δ"
    backButton.accessibilityValue = ""
    backButton.accessibilityHint
    = “લͷը໘ʹ໭Γ·͢ɻ"

    View Slide

  53. ໭ΔɺϘλϯ
    લͷը໘ʹ໭Γ·͢

    View Slide

  54. 6*7JFXʹઃఆ
    6*"DDFTTJCJMJUZ&MFNFOU
    ͱͯ͠௥Ճ
    private var elements: [UIAccessibilityElement] = []
    private func setAccessibility(x: CGFloat, y: CGFloat,
    title: String, text: String) {
    let frame = CGRect(x: x, y: y,
    width: barWidth, height: bounds.height - y)
    let element =
    UIAccessibilityElement(accessibilityContainer: self)
    element.accessibilityLabel = title
    element.accessibilityValue = text
    element.accessibilityFrameInContainerSpace = frame
    elements.append(element)
    }
    self.accessibilityElements = elements
    ΧελϜϏϡʔʹ΋ରԠՄೳ
    GSBNFͰదԠൣғΛࢦఆ
    ˞6*7JFXͷதͷઃఆͰ͢ɻ

    View Slide

  55. element.accessibilityFrameInContainerSpace = frame
    ࠇ࿮ͷൣғΛઃఆ

    View Slide

  56. checkButton.isAccessibilityElement = false
    7PJDF0WFSʹ൓Ԡͤ͞ͳ͍Α͏ʹઃఆ΋Ͱ͖Δ
    νΣοΫϘοΫεʹର͢Δ
    ಡΈ্͛͸ߦΘΕͣɺ
    ηϧશମΛҰͭͷཁૉͱ͢Δ

    View Slide

  57. customView.accessibilityCustomActions = [
    UIAccessibilityCustomAction(
    name: “Call",
    target: self,
    selector: #selector(activateCallButton)
    ),
    UIAccessibilityCustomAction(
    name: "Open address in Maps”,
    target: self,
    selector: #selector(activateLocationButton)
    )
    ]
    7PJDF0WFSݶఆͷΞΫγϣϯΛઃఆ
    UIAccessibility.post(notification: .screenChanged, argument: nil)
    7PJDF0WFS΁มߋΛ௨஌ ϑΥʔΧεͷҠಈͳͲͷͨΊ

    View Slide

  58. ֬ೝํ๏

    View Slide

  59. "DDFTTJCJMJUZ*OTQFDUPS
    ཁૉʹͲΜͳ஋͕ઃఆ͞Ε͍ͯΔ͔͕Θ͔Δ

    View Slide

  60. ·ͱΊ

    View Slide

  61. ೉͍͠ʁ

    View Slide

  62. ಛผͳٕज़͕
    શͯͰ͸ͳ͍

    View Slide

  63. wେࣄͳՕॴͷจࣈΛڧௐ͢Δ
    wϏσΦʹࣈນΛ͚ͭΔ
    w׬ྃ࣌ʹԻΛ໐Β͢

    View Slide

  64. શ෦΍Δ΂͖
    Ͱ΋ͳ͍

    View Slide

  65. wରԠ͍ͯ͠Δ㱠࢖͍΍͍͢
    wແཧʹ͢Δͱෛ୲͚ͩˢ

    View Slide

  66. ࣗ෼ͷΞϓϦʹ
    ඞཁͳ΋ͷ͸ʁ
    Λߟ͑ͯΈΔ

    View Slide

  67. IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    88%$ಈըϦϯΫू Ұ෦ൈਮ

    View Slide

  68. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide

  69. "QQMFͷΞΫηγϏϦςΟػೳ঺հ
    IUUQTXXXBQQMFDPNKQBDDFTTJCJMJUZ
    6*,JU"DDFTTJCJMJUZ
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUBDDFTTJCJMJUZ
    .FEJB"DDFTTJCJMJUZ
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONFEJBBDDFTTJCJMJUZ
    )VNBO*OUFSGBDF(VJEFMJOFT
    IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFT
    υΩϡϝϯτͳͲϦϯΫू

    View Slide

  70. ·ͣ͸
    ମݧͯ͠Έ·͠ΐ͏

    View Slide

  71. IUUQTEFWFMPQFSBQQMFDPNWJEFPT
    QMBZXXED
    7PJDF0WFS"QQ5FTUJOH#FZPOE5IF7JTVBMT

    View Slide

  72. 7PJDF0WFSͷ
    ࢖͍ํ
    ෇࿥

    View Slide

  73. Ç
    Ç

    View Slide

  74. ϗʔϜϘλϯΛ̏ճλοϓ
    ˞J1IPOF9͸αΠυϘλϯ

    View Slide

  75. ૢ࡞ํ๏
    w ̍ຊࢦࠨӈεϫΠϓɹ߲໨Ҡಈ
    w ̎ຊࢦԼˠ্ɹશ߲໨ಡΈ্͛
    w ̎ຊࢦ্ˠԼɹεϫΠϓ։࢝Ґஔ͔Βશ߲໨ಡΈ্͛
    w ̏ຊࢦࠨӈεϫΠϓɹը໘ભҠ
    w ̍ຊࢦλοϓɹ߲໨આ໌Ի੠ग़ྗ
    w ̍ຊࢦμϒϧλοϓɹ࣮ߦ
    w ̎ຊࢦλοϓɹಡΈ্͛ఀࢭ

    View Slide

  76. εΫϦʔϯΧʔςϯ
    w ̏ຊࢦλοϓ̏ճ ζʔϜػೳ0/࣌͸̐ճ

    w ը໘Λ0''ʹ͢Δɹ

    View Slide

  77. ϩʔλʔ
    w ̎ຊࢦͰը໘Λճసɹઃఆ߲໨มߋ
    w ̍ຊࢦ্ԼεϫΠϓɹ஋มߋ

    View Slide