I plot several MKAnnotations on an MKMapView. I'd like VoiceOver users to be able to continue panning/zooming a map as they normally would, but I'd also like them to to be able to quickly and easily navigate through my MKAnnotations if they choose. I feel like a custom rotor is the perfect solution for this.
Create a custom VoiceOver Rotor to navigate MKAnnotationViews?
1.2k Views Asked by djibouti33 At
1
There are 1 best solutions below
Related Questions in IOS
- URLSession requesting JSON array from server not working
- Incorrect display of LinearGradientBrush in IOS
- Module not found when building flutter app for IOS
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Occasional crash at NSURLSessionDataTask dataTaskWithRequest:completionHandler:
- Expo Deep linking on iOS is not working (because of Google sign-in?)
- On iOS, the keyboard does not offer a 6-character SMS code
- Hi, there is an error happened when I build my flutter app, after I'm installing firebase packages occurs that error
- The copy/paste functionalities don't work only on iOS in the Flutter app
- Hide LiveActivityIntent Button from Shortcuts App
- While Running Github Actions Pipeline: No Signing Certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID
- Actionable notification api call not working in background
- Accessibility : Full keyboard access with scroll view in swiftui
- There is a problem with the request entity - You are not allowed to create 'iOS' profile with App ID 'XXXX'
- I am getting "binding has not yet been initialized" error when trying to connect firebase with flutter
Related Questions in SWIFT
- Navigate after logged in with webservice
- URLSession requesting JSON array from server not working
- When using onDrag in SwiftUI on Mac how can I detect when the dragged object has been released anywhere?
- Protect OpenAI key using Firebase function
- How to correct error: "Cannot convert value of type 'MyType.Type' to expected argument type 'Binding<MyType>'"?
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Using @Bindable with a Observable type in SwiftUI
- How to make a scroll view of 9 images in a forEach loop open on image 6 if image 6 is clicked on from a grid?
- Using MTLPixelFormat.rgba16Float results in random round-off errors
- Search and highlight text of current text in PDFKit Swift
- How is passing a function as a parameter related to escaping autoclosure?
- Actionable notification api call not working in background
- Custom layout occupies all horizontal space
- Is it possible to fix slow CKAsset loading on Cloudkit?
- Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value - MapView.isMyLocationEnabled
Related Questions in VOICEOVER
- iOS Voice Over only reads out the title of any alert views
- Voiceover support in ObjC++
- iOS Voice Over to announce new view titles when pushed/popped on a UINavigationController
- Prevent Voiceover from reading UIAccessibility accessibilityLabel
- Dismiss a UIKeyboardTypeNumberPad in a UITextField when VoiceOver is active?
- How to set the Voice Over accessibility label for UIPickerView rows?
- What is UIAccessibilityTraitUpdatesFrequently in iOS UIAccessibility?
- Which view should you use for UIAccessibilityConvertFrameToScreenCoordinates?
- WAI-ARIA HTML. How to force 2 divs to be read out as one?
- How can I get IndexPath of currently selected tableviewcell by voice over?
- Is there a way to change text for default accessibility action in VoiceOver in iOS app?
- VoiceOver Accessibility issue on inline elements
- Navigate views in a horizontal UIScrollView using VoiceOver
- iOS Accessibility Voiceover Reads Out Unnecessary Content in Web
- UIPageViewController accessibility or voiceover
Related Questions in UIACCESSIBILITY
- Voice over gender changes between UIKit and SwiftUI views
- voice over is enabled(UIaccesibility.isVoiceOverRunning) on parent A(nav controller) and On child view(UIactivityViewcontroller)voice over is disabled
- Make screen readers (NDVA) announce menu items after login
- Convert read only fields for accessibility purposes
- accessibilityViewIsModal in swiftUI
- Unwanted VoiceOver focus on UITableViewCell
- AccessibilityIdentifier for group of Texts at the same time with identifiers to each of Text
- How to skip accessibility focus on one bar button item and keep focus on other bar button items of the toolbar
- Voice Over is not reading back button on viewcontroller, but reads it if execute command in lldb
- is it possible for a third-Party to develop Android Accessibility Service with Real-Time Speech Recognition for Live Captions-like Functionality
- how do I dismiss keyboard when a UIView receives accessibilityElementDidLoseFocus
- Scaling Font Size According to Android Accessibility Settings - Handling Thresholds
- IAccIdentity is not returning unique values?
- MSAA - How to check if 2 automation elements refer to the same thing?
- UIAccessibility not behaving as expected--swiping right from close button does not go to header label below it
Related Questions in ROTOR
- Rotor SSCLI 2.0 - Error in building PAL
- What is DiscardableAttribute used for?
- Heading Rotor not reading invisible headings
- Is there a version of Rotor for .NET 3.5? If so, where?
- What is the difference between SSCLI 2.0 (ROTOR) and .NET?
- How to get certain UITextview to be included in the header accessibility rotor?
- How to delete uiAccessibility voice over custom rotors
- iOS 13 Voiceover issue, rotor action not working with embedded links
- Create a custom VoiceOver Rotor to navigate MKAnnotationViews?
- iOS Voice Over rotor notifications?
- raku What is a better way to do rotor from the end?
- Interchange the Y and Z axis in 3D- isosurface plot
- How to implement rotor with auto-text for my custom input method in VoiceOver?
- Accessibility Rotor changed behavior under iOS 16
- Extra line drawn in Flotchart using TickRotor plugin
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Self answering here, because I spent an insane amount of time getting this right, and figured someone else might need this. At the time I needed to develop this, there were hardly any examples online that go into detail about creating custom rotors, and Apple's documentation is very sparse. I finally figured it out though, after watching and following (and pausing on screens of code) the WWDC Session 202 (begins at 24:17).
The trickiest thing I needed to figure out was how to reliably return a
UIAccessibilityCustomRotorItemResult. For anMKMapView, you want to returnMKAnnotationViews, but an annotation is not guaranteed to have an associated view (they're recycled, and if an annotation is offscreen, there's a good chance it's view has been reused), so my first attempts kept leaving out some, or most, of my annotations.The magic is in setting the animated: property to false:
You can't use view(for:MKAnnotation) because of reasons stated above, so what the line above does is moves the map so your pin is at the center. Because it's not animating, the annotation has it's view created immediately, and in the next line of code, in my testing, it's guaranteed to return an
MKAnnotationView.YVVM, but please feel free to add suggestions for improvement, as I feel navigating a map in this way is crucial for VoiceOver users.