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
700
3
Share
iosdc2018.pdf
iosdc2018でLTをしたときのアクセシビリティについての資料です。
[email protected]
September 01, 2018
More Decks by
[email protected]
See All by
[email protected]
TSPLのすすめ
shiz
1
270
Swift compiler 101 & How async function works
shiz
0
93
Swiftコンパイラ超入門+async関数の仕組み
shiz
0
350
複雑さに立ち向かうための ソフトウェア開発入門
shiz
3
2.1k
座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
5
16k
(非公開スライド追加)座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
1
720
複雑さに立ち向かうためのコードリーディング入門
shiz
35
15k
Swift Observation
shiz
5
920
Swift Reflection
shiz
1
290
Other Decks in Programming
See All in Programming
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
110
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
220
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
How Swift's Type System Guides AI Agents
koher
0
180
飯MCP
yusukebe
0
490
おれのAgentic Coding 2026/03
tsukasagr
1
140
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
130
Running Swift without an OS
kishikawakatsumi
0
380
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
180
Coding as Prompting Since 2025
ragingwind
0
770
アーキテクチャモダナイゼーションとは何か
nwiizo
17
4.5k
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
2
120
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
790
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Bash Introduction
62gerente
615
210k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
The untapped power of vector embeddings
frankvandijk
2
1.7k
How to Talk to Developers About Accessibility
jct
2
170
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Prompt Engineering for Job Search
mfonobong
0
250
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
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 ̍ຊࢦ্ԼεϫΠϓɹมߋ