Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iosdc2018.pdf
Search
[email protected]
September 01, 2018
Programming
3
530
iosdc2018.pdf
iosdc2018でLTをしたときのアクセシビリティについての資料です。
[email protected]
September 01, 2018
Tweet
Share
More Decks by
[email protected]
See All by
[email protected]
複雑さに立ち向かうための ソフトウェア開発入門
shiz
3
1.1k
座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
5
12k
(非公開スライド追加)座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
1
280
複雑さに立ち向かうためのコードリーディング入門
shiz
35
13k
Swift Observation
shiz
5
760
Swift Reflection
shiz
1
170
Swift Concurrency Next Step
shiz
7
7.5k
そろそろSwift Concurrency
shiz
1
450
Hello, Swift Concurrency world.の振り返り / Looking back on Hello, Swift Concurrency world.
shiz
0
120
Other Decks in Programming
See All in Programming
Kaigi on Rails 2024 - Rails APIモードのためのシンプルで効果的なCSRF対策 / kaigionrails-2024-csrf
corocn
5
3.6k
offers_20241022_imakiire.pdf
imakurusu
2
370
qmuntal/stateless のススメ
sgash708
0
120
Vue SFCのtemplateでTypeScriptの型を活用しよう
tsukkee
3
1.6k
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
230
Universal Linksの実装方法と陥りがちな罠
kaitokudou
1
240
CPython 인터프리터 구조 파헤치기 - PyCon Korea 24
kennethanceyer
0
250
Kotlin2でdataクラスの copyメソッドを禁止する/Data class copy function to have the same visibility as constructor
eichisanden
1
160
Pinia Colada が実現するスマートな非同期処理
naokihaba
2
170
リリース8年目のサービスの1800個のERBファイルをViewComponentに移行した方法とその結果
katty0324
5
3.9k
CSC509 Lecture 08
javiergs
PRO
0
110
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
450
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
41
2.2k
KATA
mclloyd
29
13k
Navigating Team Friction
lara
183
14k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
Documentation Writing (for coders)
carmenintech
65
4.4k
Git: the NoSQL Database
bkeepers
PRO
426
64k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Happy Clients
brianwarren
97
6.7k
A Philosophy of Restraint
colly
203
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
Music & Morning Musume
bryan
46
6.1k
Faster Mobile Websites
deanohume
304
30k
Transcript
Πν͔Β࢝ΊΔ ΞΫηγϏϦςΟ J04%$ TIJ[ ͣ͠ !TU[O d·ͣͰ͖Δͱ͜Ζ͔Βd
ࣗݾհ ߴా৽ࢁ 5BLBUB4IJO[BO 4IJ[ ͣ͠ גࣜձࣾΦϑΟεࠏ ϞόΠϧ͔ΒΠϯϑϥ·ͰΔ ࡶଟͳΤϯδχΞ 4XJGU
"OESPJE LPUMJO "OHVMBS /PEFKT $ 1)1 +BWB J04ΤϯδχΞࢦ͍ͯ͠·͢
ຊͷςʔϚ ΞΫηγϏϦςΟ
ΞΫηγϏϦςΟ ͬͯʁ
ํ๏ͱঢ়گʹΑΒͣ ୭͕ใΛ ͘͠औಘͰ͖Δ͜ͱ
୭ʹͱͬͯʁ
ΞΫηγϏϦςΟͬͯ Կ͔ಛผͳͷʁ
ྫ͑
ి͕ೖΒͳ͍….
͕͑ͳ͍….
δϣΪϯάத ӡసத ຬһిंͷத ଠཅ͕রΓ͚ͭΔதͷ֎ ΠϠϗϯΕͯԻ͕ฉ͚ͳ͍ ը໘͕όΩόΩ ՙͰ྆ख͕;͕͍ͬͯ͞Δ ௨ৗͷૢ࡞͕ࠔͳঢ়گ
ΞΫηγϏϦςΟ ୭ʹͰඞཁͳͷ
Ͳ͏ͬͯ ΞΫηγϒϧʹ͢Δʁ
J04)VNBO*OUFSGBDFHVJEFMJOFT )*( IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTJPTBQQ BSDIJUFDUVSFBDDFTTJCJMJUZ
υΩϡϝϯτ IUUQTEFWFMPQFSBQQMFDPNBDDFTTJCJMJUZ
۩ମతͳػೳ̎ͭհ
%ZOBNJD5ZQF
None
None
Ϣʔβͷઃఆʹ߹Θͤͯ จࣈͷେ͖͕͞มΘΔ
ઃఆ͔ΒจࣈαΠζΛมߋ
ΞΫηγϏϦςΟػೳͰ ͞Βʹେ͖ͳจࣈ
5FYU4UZMFΛબͿ νΣοΫΛ͚ͭΔ
QSJWBUFMFUVTFS/BNF6*-BCFM VTFS/BNFGPOU6*'POUQSFGFSSFE'POU GPS5FYU4UZMFUJUMF VTFS/BNFBEKVTUT'POU'PS$POUFOU4J[F$BUFHPSZUSVF จࣈͷେ͖͕͞มΘΔ
FYUSB4NBMM FYUSB&YUSB&YUSB-BSHF
BDDFTTJCJMJUZ.FEJVN BDDFTTJCJMJUZ&YUSB&YUSB&YUSB-BSHF
%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
-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
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 ^
ϨΠΞτ่͕ΕΔ͜ͱ͕͋Δ QSJWBUFMFUEBUF6*-BCFM EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU FRVBM5P VTFS/BNFMBTU#BTFMJOF"ODIPS DPOTUBOU
QSJWBUFMFUEBUF6*-BCFM EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU&RVBM5P4ZTUFN4QBDJOH#FMPX VTFS/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.isAccessibilityCategory
if isAccessibilityCategory != previousTraitCollection?.preferredContentSizeCategory.isAccessibilityCategory { updateLayoutContraints() } } ΞΫηγϏϦςΟͷઃఆΛΩϟονͰ͖Δ จࣈαΠζͷઃఆʹ߹ΘͤͯશͯͷཁૉΛਨʹϨΠΞτ
GSBNFPSJHJOZ 6*'POU.FUSJDTEFGBVMUTDBMFE7BMVF GPS ઃఆʹ߹ΘͤͯจࣈͷαΠζಈతʹऔಘͰ͖Δ खಈͰઃఆ͍ͯ͠Δ߹ σϑΥϧτQU͔ΒઃఆʹԠͯ͡มԽ͢Δ
5BCMF7JFX$FMMʹ੍Λઃఆ wจࣈͷେ͖͞ʹΑͬͯηϧͷߴ͕͞ม ΘΔͷͰTFMGTJ[JOH͕ඞཁ w J04 ඪ४ͷ6*5BCMF7JFX$FMMΛ༻ ͍ͯ͠Δ߹ɺࣗಈͰௐͯ͘͠ΕΔ wηϧͷߴ͞Λݻఆʹઃఆɺ·ͨ*#Λ ༻͍ͯ͠Δ߹ɺௐ͕ඞཁ
QSJWBUFMFUEBUF6*-BCFM EBUFpSTU#BTFMJOF"ODIPSDPOTUSBJOU&RVBM5P4ZTUFN4QBDJOH#FMPX VTFS/BNFMBTU#BTFMJOF"ODIPS NVMUJQMJFS "VUP-BZPVUΛ༻͍ͯ͠Δ߹ QSJWBUFMFUEBUF6*-BCFM EBUFUPQ"ODIPSDPOTUSBJOU FRVBM5PVTFS/BNFCPUUPN"ODIPS
DPOTUBOU
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[FIFJHIU EBUF4J[FIFJHIU DPOUFOU4J[FIFJHIU NBSHJO ^ 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*"DDFTTJCJMJUZ BDDFTTJCJMJUZ-BCFM BDDFTTJCJMJUZ'SBNF BDDFTTJCJMJUZ5SBJUT BDDFTTJCJMJUZ7BMVF BDDFTTJCJMJUZ)JOU 6*7JFX
private var backButton = UIButton() backButton.accessibilityTraits = UIAccessibilityTraitButton backButton.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 = title element.accessibilityValue = text element.accessibilityFrameInContainerSpace = frame elements.append(element) } self.accessibilityElements = elements ΧελϜϏϡʔʹରԠՄೳ GSBNFͰదԠൣғΛࢦఆ ˞6*7JFXͷதͷઃఆͰ͢ɻ
element.accessibilityFrameInContainerSpace = frame ࠇͷൣғΛઃఆ
checkButton.isAccessibilityElement = false 7PJDF0WFSʹԠͤ͞ͳ͍Α͏ʹઃఆͰ͖Δ νΣοΫϘοΫεʹର͢Δ ಡΈ্͛ߦΘΕͣɺ ηϧશମΛҰͭͷཁૉͱ͢Δ
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ແཧʹ͢Δͱෛ୲͚ͩˢ
ࣗͷΞϓϦʹ ඞཁͳͷʁ Λߟ͑ͯΈΔ
IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 88%$ಈըϦϯΫू Ұ෦ൈਮ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
"QQMFͷΞΫηγϏϦςΟػೳհ IUUQTXXXBQQMFDPNKQBDDFTTJCJMJUZ 6*,JU"DDFTTJCJMJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUBDDFTTJCJMJUZ .FEJB"DDFTTJCJMJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONFEJBBDDFTTJCJMJUZ )VNBO*OUFSGBDF(VJEFMJOFT IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFT υΩϡϝϯτͳͲϦϯΫू
·ͣ ମݧͯ͠Έ·͠ΐ͏
IUUQTEFWFMPQFSBQQMFDPNWJEFPT QMBZXXED 7PJDF0WFS"QQ5FTUJOH#FZPOE5IF7JTVBMT
7PJDF0WFSͷ ͍ํ
Ç Ç
ϗʔϜϘλϯΛ̏ճλοϓ ˞J1IPOF9αΠυϘλϯ
ૢ࡞ํ๏ w ̍ຊࢦࠨӈεϫΠϓɹ߲Ҡಈ w ̎ຊࢦԼˠ্ɹશ߲ಡΈ্͛ w ̎ຊࢦ্ˠԼɹεϫΠϓ։࢝Ґஔ͔Βશ߲ಡΈ্͛ w ̏ຊࢦࠨӈεϫΠϓɹը໘ભҠ w
̍ຊࢦλοϓɹ߲આ໌Իग़ྗ w ̍ຊࢦμϒϧλοϓɹ࣮ߦ w ̎ຊࢦλοϓɹಡΈ্͛ఀࢭ
εΫϦʔϯΧʔςϯ w ̏ຊࢦλοϓ̏ճ ζʔϜػೳ0/࣌̐ճ w ը໘Λ0''ʹ͢Δɹ
ϩʔλʔ w ̎ຊࢦͰը໘Λճసɹઃఆ߲มߋ w ̍ຊࢦ্ԼεϫΠϓɹมߋ