iosdc2018でLTをしたときのアクセシビリティについての資料です。
Πν͔Β࢝ΊΔΞΫηγϏϦςΟJ04%$ TIJ[ ͣ͠!TU[Od·ͣͰ͖Δͱ͜Ζ͔Βd
View Slide
ࣗݾհߴా৽ࢁ 5BLBUB4IJO[BO4IJ[ ͣ͠גࣜձࣾΦϑΟεࠏϞόΠϧ͔ΒΠϯϑϥ·ͰΔ ࡶଟͳΤϯδχΞ 4XJGU "OESPJE LPUMJO "OHVMBS /PEFKT $ 1)1 +BWBJ04ΤϯδχΞࢦ͍ͯ͠·͢
ຊͷςʔϚΞΫηγϏϦςΟ
ΞΫηγϏϦςΟͬͯʁ
ํ๏ͱঢ়گʹΑΒͣ୭͕ใΛ͘͠औಘͰ͖Δ͜ͱ
୭ʹͱͬͯʁ
ΞΫηγϏϦςΟͬͯԿ͔ಛผͳͷʁ
ྫ͑
ి͕ೖΒͳ͍….
͕͑ͳ͍….
δϣΪϯάதӡసதຬһిंͷத ଠཅ͕রΓ͚ͭΔதͷ֎ΠϠϗϯΕͯԻ͕ฉ͚ͳ͍ը໘͕όΩόΩՙͰ྆ख͕;͕͍ͬͯ͞Δ௨ৗͷૢ࡞͕ࠔͳঢ়گ
ΞΫηγϏϦςΟ୭ʹͰඞཁͳͷ
Ͳ͏ͬͯΞΫηγϒϧʹ͢Δʁ
J04)VNBO*OUFSGBDFHVJEFMJOFT)*(IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTJPTBQQBSDIJUFDUVSFBDDFTTJCJMJUZ
υΩϡϝϯτIUUQTEFWFMPQFSBQQMFDPNBDDFTTJCJMJUZ
۩ମతͳػೳ̎ͭհ
%ZOBNJD5ZQF
Ϣʔβͷઃఆʹ߹Θͤͯจࣈͷେ͖͕͞มΘΔ
ઃఆ͔ΒจࣈαΠζΛมߋ
ΞΫηγϏϦςΟػೳͰ͞Βʹେ͖ͳจࣈ
5FYU4UZMFΛબͿνΣοΫΛ͚ͭΔ
QSJWBUFMFUVTFS/BNF6*-BCFM VTFS/BNFGPOU6*'POUQSFGFSSFE'POU GPS5FYU4UZMFUJUMFVTFS/BNFBEKVTUT'POU'PS$POUFOU4J[F$BUFHPSZUSVFจࣈͷେ͖͕͞มΘΔ
FYUSB4NBMM FYUSB&YUSB&YUSB-BSHF
BDDFTTJCJMJUZ.FEJVNBDDFTTJCJMJUZ&YUSB&YUSB&YUSB-BSHF
%ZOBNJD5ZQF4J[FT4UZMF 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
-BSHFS"DDFTTJCJMJUZ5ZQF4J[FT4UZMF 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
J04͔ΒΧελϜϑΥϯτʹରԠ8FC7JFXͰར༻ՄೳQSJWBUFMFUDPOUFOU6*-BCFM JGMFUGPOU6*'POU OBNF/PUFXPSUIZ TJ[F\DPOUFOUGPOU6*'POU.FUSJDTEFGBVMUTDBMFE'POU GPSGPOU^DPOUFOUBEKVTUT'POU'PS$POUFOU4J[F$BUFHPSZUSVFCPEZ\GPOUBQQMFTZTUFNCPEZ"QQMFσόΠεͷΈར༻Մೳ^I\GPOUTJ[FSFN^
ϨΠΞτ่͕ΕΔ͜ͱ͕͋ΔQSJWBUFMFUEBUF6*-BCFM EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU FRVBM5PVTFS/BNFMBTU#BTFMJOF"ODIPS DPOTUBOU
QSJWBUFMFUEBUF6*-BCFM EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU&RVBM5P4ZTUFN4QBDJOH#FMPXVTFS/BNFMBTU#BTFMJOF"ODIPS NVMUJQMJFSεϖʔεΛࣗಈͰௐͯ͘͠ΕΔ
7FSUJDBM#BTFMJOF4UBOEBSE4QBDJOHΛ༻͢Δ
QSJWBUFMFUEBUF6*-BCFM EBUFUPQ"ODIPSDPOTUSBJOU FRVBM5PVTFS/BNFCPUUPN"ODIPS DPOTUBOU͜Ε0,"࣮#BTFMJOFͰ੍͠ͳ͚Ε0,ͩͬͨΓ͢Δ
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {let isAccessibilityCategory =traitCollection.preferredContentSizeCategory.isAccessibilityCategoryif isAccessibilityCategory !=previousTraitCollection?.preferredContentSizeCategory.isAccessibilityCategory {updateLayoutContraints()}}ΞΫηγϏϦςΟͷઃఆΛΩϟονͰ͖ΔจࣈαΠζͷઃఆʹ߹ΘͤͯશͯͷཁૉΛਨʹϨΠΞτ
GSBNFPSJHJOZ6*'POU.FUSJDTEFGBVMUTDBMFE7BMVF GPSઃఆʹ߹ΘͤͯจࣈͷαΠζಈతʹऔಘͰ͖ΔखಈͰઃఆ͍ͯ͠Δ߹σϑΥϧτQU͔ΒઃఆʹԠͯ͡มԽ͢Δ
5BCMF7JFX$FMMʹ੍Λઃఆwจࣈͷେ͖͞ʹΑͬͯηϧͷߴ͕͞มΘΔͷͰTFMGTJ[JOH͕ඞཁw J04ඪ४ͷ6*5BCMF7JFX$FMMΛ༻͍ͯ͠Δ߹ɺࣗಈͰௐͯ͘͠ΕΔwηϧͷߴ͞Λݻఆʹઃఆɺ·ͨ*#Λ༻͍ͯ͠Δ߹ɺௐ͕ඞཁ
QSJWBUFMFUEBUF6*-BCFM EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU&RVBM5P4ZTUFN4QBDJOH#FMPXVTFS/BNFMBTU#BTFMJOF"ODIPS NVMUJQMJFS"VUP-BZPVUΛ༻͍ͯ͠Δ߹QSJWBUFMFUEBUF6*-BCFM EBUFUPQ"ODIPSDPOTUSBJOU FRVBM5PVTFS/BNFCPUUPN"ODIPS DPOTUBOU
MFUNBSHJO$('MPBUPWFSSJEFGVODTJ[F5IBU'JUT @TJ[F$(4J[F$(4J[F\MFUVTFS4J[FVTFS/BNFTJ[F5IBU'JUT $(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUHSFBUFTU'JOJUF.BHOJUVEFMFUEBUF4J[FEBUFTJ[F5IBU'JUT $(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUHSFBUFTU'JOJUF.BHOJUVEFMFUDPOUFOU4J[FDPOUFOUTJ[F5IBU'JUT $(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUHSFBUFTU'JOJUF.BHOJUVEFSFUVSO$(4J[F XJEUITFMGDPOUFOU7JFXCPVOETXJEUI IFJHIUVTFS4J[FIFJHIUEBUF4J[FIFJHIUDPOUFOU4J[FIFJHIUNBSHJO^TJ[F5IBU'JUTΛPWFSSJEFͯ͠ߴ͞ΛઃఆDPOUFOU7JFXCPVOETTJ[FXJEUIͰԣ෯Λऔಘ"VUP-BZPVUΛ༻͍ͯ͠ͳ͍߹
*NBHF%ZOBNJD5ZQFʹରԠͰ͖Δ
1%'ͰYͷը૾Λ༻ҙ͢ΔνΣοΫΛ͚ͭΔ
QSJWBUFMFUXFBUIFS*NBHF6**NBHF7JFX XFBUIFS*NBHFBEKVTUT*NBHF4J[F'PS"DDFTTJCJMJUZ$POUFOU4J[F$BUFHPSZUSVF
νΣοΫΛ͚ͭΔ
֬ೝํ๏
"DDFTTJCJMJUZ*OTQFDUPSมߋʹԠͯ͡γϛϡϨʔλ࣮ػͷจࣈαΠζมΘΔ
3VO"VEJUରԠ͍ͯ͠ͳ͍ཁૉΛ֬ೝͰ͖Δ
7PJDF0WFS
δΣενϟʔͰૢ࡞͢Δը໘ಡΈ্͛ػೳ
ÇÇ
ࠨ͡Δ͠Ϙλϯ
ࠨҹϘλϯʁ
6*"DDFTTJCJMJUZBDDFTTJCJMJUZ-BCFMBDDFTTJCJMJUZ'SBNFBDDFTTJCJMJUZ5SBJUTBDDFTTJCJMJUZ7BMVFBDDFTTJCJMJUZ)JOU6*7JFX
private var backButton = UIButton()backButton.accessibilityTraits= UIAccessibilityTraitButtonbackButton.accessibilityLabel = "Δ"backButton.accessibilityValue = ""backButton.accessibilityHint= “લͷը໘ʹΓ·͢ɻ"
ΔɺϘλϯલͷը໘ʹΓ·͢
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 = titleelement.accessibilityValue = textelement.accessibilityFrameInContainerSpace = frameelements.append(element)}self.accessibilityElements = elementsΧελϜϏϡʔʹରԠՄೳGSBNFͰదԠൣғΛࢦఆ˞6*7JFXͷதͷઃఆͰ͢ɻ
element.accessibilityFrameInContainerSpace = frameࠇͷൣғΛઃఆ
checkButton.isAccessibilityElement = false7PJDF0WFSʹԠͤ͞ͳ͍Α͏ʹઃఆͰ͖ΔνΣοΫϘοΫεʹର͢ΔಡΈ্͛ߦΘΕͣɺηϧશମΛҰͭͷཁૉͱ͢Δ
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มߋΛ௨ ϑΥʔΧεͷҠಈͳͲͷͨΊ
"DDFTTJCJMJUZ*OTQFDUPSཁૉʹͲΜͳ͕ઃఆ͞Ε͍ͯΔ͔͕Θ͔Δ
·ͱΊ
͍͠ʁ
ಛผͳٕज़͕શͯͰͳ͍
wେࣄͳՕॴͷจࣈΛڧௐ͢ΔwϏσΦʹࣈນΛ͚ͭΔwྃ࣌ʹԻΛ໐Β͢
શ෦Δ͖Ͱͳ͍
wରԠ͍ͯ͠Δ㱠͍͍͢wແཧʹ͢Δͱෛ୲͚ͩˢ
ࣗͷΞϓϦʹඞཁͳͷʁΛߟ͑ͯΈΔ
IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED88%$ಈըϦϯΫू Ұ෦ൈਮ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
"QQMFͷΞΫηγϏϦςΟػೳհIUUQTXXXBQQMFDPNKQBDDFTTJCJMJUZ6*,JU"DDFTTJCJMJUZIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUBDDFTTJCJMJUZ.FEJB"DDFTTJCJMJUZIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONFEJBBDDFTTJCJMJUZ)VNBO*OUFSGBDF(VJEFMJOFTIUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTυΩϡϝϯτͳͲϦϯΫू
·ͣମݧͯ͠Έ·͠ΐ͏
IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED7PJDF0WFS"QQ5FTUJOH#FZPOE5IF7JTVBMT
7PJDF0WFSͷ͍ํ
ϗʔϜϘλϯΛ̏ճλοϓ˞J1IPOF9αΠυϘλϯ
ૢ࡞ํ๏w ̍ຊࢦࠨӈεϫΠϓɹ߲Ҡಈw ̎ຊࢦԼˠ্ɹશ߲ಡΈ্͛w ̎ຊࢦ্ˠԼɹεϫΠϓ։࢝Ґஔ͔Βશ߲ಡΈ্͛w ̏ຊࢦࠨӈεϫΠϓɹը໘ભҠw ̍ຊࢦλοϓɹ߲આ໌Իग़ྗw ̍ຊࢦμϒϧλοϓɹ࣮ߦw ̎ຊࢦλοϓɹಡΈ্͛ఀࢭ
εΫϦʔϯΧʔςϯw ̏ຊࢦλοϓ̏ճ ζʔϜػೳ0/࣌̐ճw ը໘Λ0''ʹ͢Δɹ
ϩʔλʔw ̎ຊࢦͰը໘Λճసɹઃఆ߲มߋw ̍ຊࢦ্ԼεϫΠϓɹมߋ