Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
VoiceOver On
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Leena
April 28, 2019
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
VoiceOver On
Leena
April 28, 2019
Other Decks in Programming
See All in Programming
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
190
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
270
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
420
golang-bob.pdf
iwatsukayura
0
130
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
130
AWSに止められる覚悟してますか?
morizo_1984
2
530
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
残高管理から台帳サービスへの進化
artoy
1
200
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Google's AI Overviews - The New Search
badams
0
1.6k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
The World Runs on Bad Software
bkeepers
PRO
72
12k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Transcript
Leena Mansour PagerDuty @_leenam Photo by: https://unsplash.com/@lastly “VoiceOver On…”
The “VoiceOver On” Project Photo by: https://unsplash.com/@kylejohnston
I M P O R TA N T N O
T E
Photo by: https://unsplash.com/@joshcala
A G E N D A • First Impressions •
Common Frustrations • Unexpected learnings • VoiceOver Rotor
R U L E S O F T H E
G A M E Photo by: https://unsplash.com/@randyfath
First Impressions
Using VoiceOver without a screen is really. really. hard.
H O W I U S E D T O
T E S T M Y A P P ’ S A C C E S S I B I L I T Y I S N O T G O O D E N O U G H
M AY B E I J U S T W
O N ’ T T E X T Y O U B A C K Photo by: https://unsplash.com/@benjaminrobyn
Photo by: https://unsplash.com/@neonbrand F O U R T H I
N G S
1 . A R E A L L O F
Y O U R I T E M S A N D F E AT U R E S A C C E S S I B L E ? Photo by: https://unsplash.com/@glenncarstenspeters
N O N N AT I V E A P
P S
2 . S O M E V O U S
E R S A R E A L S O V I S U A L U S E R S Photo by: https://unsplash.com/@stevenwright
3 . G R O U P Y O U
R L A B E L S !
"
4 . S O M E T H I N
G S A R E B E T T E R L E F T U N S A I D ( O R S A I D D I F F E R E N T LY )
U N E X P E C T E D
L E A R N I N G S Photo by: https://unsplash.com/@fempreneurstyledstock
None
None
None
None
None
B R A I L L E R E A
D E R D E V I C E S !
V O I C E O V E R R
O T O R Photo by: https://unsplash.com/@gypsycompassrose
V O I C E O V E R R
O T O R
C U S T O M R O T O
R A C T I O N S
E A S Y P E A S Y func
addRotorActions(to cell: UITableViewCell) { let completeTaskAction = UIAccessibilityCustomAction(name: "Complete Task", target: self, selector: #selector(setTaskCompleted)) let deleteTaskAction = UIAccessibilityCustomAction(name: "Delete Task", target: self, selector: #selector(deleteTask)) cell.accessibilityCustomActions = [completeTaskAction, deleteTaskAction] }
W H AT D O I D O N O
W ?
R E C A P • Make sure all functionality
is accessible • Make sure the element order makes sense • Group your elements • Make sure the elements’ names make sense • Leverage Rotor Actions
B E T T E R R E C A
P Be a VoiceOver User
None
None
R E S O U R C E S •
iPhone Settings VoiceOver Practice • Blind Abilities iPhone 101 podcast series • www.github.com/LeenaMansour/voiceover-on
Leena Mansour PagerDuty @_leenam Photo by: https://unsplash.com/@kellysikkema