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.3k
座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
5
13k
(非公開スライド追加)座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
1
360
複雑さに立ち向かうためのコードリーディング入門
shiz
35
13k
Swift Observation
shiz
5
780
Swift Reflection
shiz
1
180
Swift Concurrency Next Step
shiz
7
7.7k
そろそろSwift Concurrency
shiz
1
460
Hello, Swift Concurrency world.の振り返り / Looking back on Hello, Swift Concurrency world.
shiz
0
130
Other Decks in Programming
See All in Programming
命名をリントする
chiroruxx
1
390
快速入門可觀測性
blueswen
0
340
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
270
Effective Signals in Angular 19+: Rules and Helpers @ngbe2024
manfredsteyer
PRO
0
130
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
540
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
130
Go の GC の不得意な部分を克服したい
taiyow
2
770
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
335
57k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Faster Mobile Websites
deanohume
305
30k
Building Your Own Lightsaber
phodgson
103
6.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
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 ̍ຊࢦ্ԼεϫΠϓɹมߋ