在 Swift 中,如何在 Voiceover 说话时停止文本转语音,反之亦然?

2024-02-16

现在,我的应用程序实现了AVSpeechSynthesizer读出每个屏幕的说明。该应用程序还会考虑何时启用 Voiceover 辅助功能。

我现在面临的问题是文本转语音功能与画外音功能重叠。是否有解决方案可以检测到当用户导航到屏幕上的另一个元素时,TTS 停止说话,或者当 TTS 说话时,旁白在 TTS 完成之前不会说话(不过前者是首选)。

目前的开发是在 iOS 8 上使用 Swift。


OPTION 1

您可以通过观察来聆听新元素何时被聚焦UIAccessibilityElementFocusedNotification通知

[[NSNotificationCenter defaultCenter] addObserver:yourTTSManager
                                         selector:@selector(interruptTTSFunction:)
                                             name:UIAccessibilityElementFocusedNotification 
                                           object:nil];

并在收到自定义语音合成公告时中断它们。

优点:为 VoiceOver 用户提供很多控制权。

缺点:您不知道 VoiceOver 何时完成朗读新聚焦的控件,因此您无法使用它来中断和重新启动公告。

OPTION 2

您可以通过发帖来告诉 VoiceOver 暂停和重新启动

UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil); 

在您宣布之前以及

UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil); 

完成后。

优点:您的公告将被完整地宣读。

缺点:当您暂停 VoiceOver 时,您就失去了用户的控制权。

推荐

如果您的公告很短,暂停和恢复 AT 并不是一个糟糕的解决方案。否则,我建议允许 VoiceOver 用户通过收听来中断/取消您的公告UIAccessibilityElementFocusedNotification事件,并在收到任何活动公告时取消它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中,如何在 Voiceover 说话时停止文本转语音,反之亦然? 的相关文章

随机推荐

  • 那么我在这里谈论的是 SOA 吗?

    对于政府合同 我们将建议建立一个交通监控架构 我们将有以下组件 摄像机设置在感兴趣区域周围 摄像机将了解它们的位置和方向以及观看参数 GIS地图服务器 可以查询街道 建筑物等 一种算法接收原始视频和街道位置信息并输出汽车位置 另一种算法接收
  • 检查字符串是否包含列表中的元素的更智能方法 - python

    List top brands包含品牌列表 例如 top brands Coca Cola Apple Victoria s Secret items is a pandas DataFrame结构如下图所示 我的任务是填写brand na
  • Visual Studio 2008 类视图缺少类

    我刚刚将一个大型项目从旧版本的 Visual C 移植到 VS2008 并注意到类视图缺少一些我的类 查看解决方案视图 声明这些类的头文件存在 因此我希望在类视图中看到它们 排除某些类的任何原因 或者有什么方法可以刷新类视图以包含解决方案中
  • shiny,DT,styleColorBar 正值和负值的颜色不同?

    我已阅读 DT pdf 文档并进行了搜索 但 DT 包似乎不支持不同的颜色 我怎样才能达到下面图片链接所示的效果 谢谢 示例 正值和负值使用不同的颜色 https asymmetryobservations files wordpress
  • 将 copts/defines 传播到目标的所有依赖项

    我有一个项目 在一个相当复杂的构建系统中的单个工作空间中涉及多个构建文件 简而言之 我的目标 对于某些特定目标 我希望使用一组额外的属性来构建其所有递归依赖项 copts defines 与以任 何其他方式构建这些依赖项目标时相比 我还没有
  • 在 BIN 文件夹中找不到 ApacheJMeterTemporaryRootCA.crt

    我无法在 bin 文件夹中看到 ApacheJMeterTemporaryRootCA crt 文件 我正在运行 jmeter 5 2 1 我需要对此进行排序 以便能够将认证添加到对服务器的 API 调用中 请提供任何帮助或为我指明正确的方
  • 在 C# 中存储永远不会改变的静态数据的最佳方法是什么

    我有一个类将数据存储在 asp net c 应用程序中 并且永远不会改变 我真的不想将这些数据放入数据库中 我希望它保留在应用程序中 这是我在应用程序中存储数据的方法 public class PostVoteTypeFunctions p
  • 从html中提取标题标签

    我想从 html 字符串中提取标题标签的内容 我已经进行了一些搜索 但到目前为止我无法在 VB C 或 PHP 中找到此类代码 此外 这应该适用于大写和小写标签 例如应该与两者一起使用和 TITLE gt 谢谢 您可以为此使用正则表达式 但
  • 如何在 Haskell 中进行嵌套“循环”

    我正在查看一些 JAVA 代码 我想知道如何将其转换为 Haskell IntStream range 0 cookedWords length parallel forEach int i gt int A cookedWords i f
  • 在视图中播放框架配置值

    我如何访问该值application name from conf application conf在一个视图中 您可以使用以下代码示例来执行此操作 play configuration application name 另请参阅http
  • 如何使用 postData 过滤器刷新 jqGrid 搜索对话框

    我正在使用 jqGrid 到目前为止一切都运行良好 但现在我正在努力允许用户能够保存他们的搜索 以便他们以后可以检索它们和 或将它们应用到不同的网格 事实证明 节省实际上是最容易的部分 我可以根据指定的 postData 过滤器获取网格进行
  • Wix 卸载不删除文件,始终假定程序文件\myApp 文件夹

    我在使用 Wix 安装程序时遇到问题 并且不知道具体缺少什么 我已启用该对话框以允许用户选择自己的安装文件夹而不是默认的安装文件夹 如果我运行安装并保留默认的 Program Files MyApp 则应用程序安装没有问题 如果我随后卸载
  • 如何解决 Labview 加载冲突

    我正在 Labview 中开发一个数据采集程序 该程序使用多个平移台 相机 高速数字化仪和其他仪器 我正在一台计算机上开发该应用程序 并将其部署到另一台计算机上 开发计算机具有labview 2013 而要部署应用程序的计算机当前具有Lab
  • 在 Backbone.js 应用程序中设置全局 REST 根 url

    在backbone js中 您必须手动设置每个模型的rooturl 有没有一种方法可以将其设置在一个位置一次并且所有模型都会使用它 For eg api site com将是 REST 服务 但出于测试目的 它可能位于localhost 1
  • Apache NiFi:使用映射值将列添加到 csv

    使用 GetFile 处理器将 csv 导入 NiFi 工作流程 我有一列由 id 组成 每个id代表一个特定的字符串 大约有3个id 例如 如果我的 csv 包含 name age id John 10 Y Jake 55 N Finn
  • 我如何在 php 中获取上个月的名称[重复]

    这个问题在这里已经有答案了 可能的重复 php 中给定月份的下个月和上个月 https stackoverflow com questions 9172035 next and previous month from a given mon
  • EventAggregator 仅适用于 MVVM 中的 ViewModel?

    我了解到在 MVVM 设计中实现的事件聚合器模式可以帮助解耦 ViewModel 之间的通信 我认为事件聚合器确实是个好主意 但转念一想 事件聚合器仅由 ViewModel 使用吗 模型可以在事件聚合器中发布和订阅事件吗 通过这种方式 Vi
  • 创建一个函数以从 Oracle 数据库中获取数据(按 ID 排列的数组)

    我正在尝试创建一个函数 它只允许我向其中传递 SQL 语句 并且它将根据我传递给它的唯一 ID 生成一个数组 function oracleGetGata query id id global conn sql OCI Parse conn
  • appspot.com 网址显示在 Google 搜索结果中,而不是自定义域名

    我已经设置了http www footballverdict com http www footballverdict com它托管在 Google App Engine 上 一切正常 您可以毫无问题地访问自定义域 由于某种原因 当我在 G
  • 在 Swift 中,如何在 Voiceover 说话时停止文本转语音,反之亦然?

    现在 我的应用程序实现了AVSpeechSynthesizer读出每个屏幕的说明 该应用程序还会考虑何时启用 Voiceover 辅助功能 我现在面临的问题是文本转语音功能与画外音功能重叠 是否有解决方案可以检测到当用户导航到屏幕上的另一个