OPTION 1
You could listen for when new elements are focused by observing UIAccessibilityElementFocusedNotification
notifications
[[NSNotificationCenter defaultCenter] addObserver:yourTTSManager
selector:@selector(interruptTTSFunction:)
name:UIAccessibilityElementFocusedNotification
object:nil];
and interrupt your custom speech synthesis announcements when they are received.
Pros: Gives the VoiceOver user a lot of control.
Cons: You don't know when VoiceOver is done reading off the newly focused control, so you can't use this to interrupt and restart announcements.
OPTION 2
You can tell VoiceOver to pause and restart by posting
UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil);
before your announcement and
UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil);
after it is complete.
Pros: Your announcement will get read off in it's entirety.
Cons: You take control out of the users hands when you pause VoiceOver.
RECOMENDATION
If your announcements are short, pausing and resuming the AT isn't a terrible solution. Otherwise, I would recommend allowing VoiceOver users to interrupt/cancel your announcements by listening for UIAccessibilityElementFocusedNotification
events, and canceling any active announcements when they are received.