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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
[email protected]
September 01, 2018
Programming
3
690
iosdc2018.pdf
iosdc2018でLTをしたときのアクセシビリティについての資料です。
[email protected]
September 01, 2018
Tweet
Share
More Decks by
[email protected]
See All by
[email protected]
TSPLのすすめ
shiz
1
250
Swift compiler 101 & How async function works
shiz
0
90
Swiftコンパイラ超入門+async関数の仕組み
shiz
0
340
複雑さに立ち向かうための ソフトウェア開発入門
shiz
3
2.1k
座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
5
16k
(非公開スライド追加)座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
1
710
複雑さに立ち向かうためのコードリーディング入門
shiz
35
14k
Swift Observation
shiz
5
910
Swift Reflection
shiz
1
290
Other Decks in Programming
See All in Programming
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
230
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
150
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
160
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
220
存在論的プログラミング: 時間と存在を記述する
koriym
3
270
PHPで TLSのプロトコルを実装してみる
higaki_program
0
340
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
350
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
410
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
3k
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
2
630
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
230
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
WENDY [Excerpt]
tessaabrams
9
37k
Google's AI Overviews - The New Search
badams
0
940
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
480
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Darren the Foodie - Storyboard
khoart
PRO
3
2.9k
The Limits of Empathy - UXLibs8
cassininazir
1
270
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
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 ̍ຊࢦ্ԼεϫΠϓɹมߋ