【问题标题】:Swift: render transcription with timestampSwift:使用时间戳渲染转录
【发布时间】:2020-05-30 12:42:43
【问题描述】:

我正在制作一个从语音转换为文本的应用程序,现在我正在尝试在屏幕上显示结果,我想知道如何做到这一点(来自Otter 应用程序):

基本思路:

  • 1 个对话包含多个句子
  • 每个句子都有多个单词,这些单词有自己的时间戳,并且会突出显示以匹配当前的音频播放时间
  • 我们可以点击每个单词以在该时间戳播放音频
  • 你可以在GIF的末尾看到,我们可以滚动滑块,文字会自动突出显示

我的想法:

  • 我正在考虑渲染代表每个单词的UILabel(或UIButton),通过这样做我们可以单击每个标签并跳转到正确的时间,但我不知道如何附加@987654325 @ 到同一行中的另一个 UILabel,尝试搜索但找不到解决方案。一个句子可能很长并且包含多个单词,因为如果需要,它需要分成多行
  • 我还想知道,为了让标签在音频播放(或滚动滑块时)自动突出显示,他们应该了解如何“观察”音频播放时间的变化(或滑块值的变化)。 1 个对话可能包含很多句子,如果我们以低效率的方式“观看”会导致性能不佳

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    我宁愿推荐使用UIButton 而不是UILabel,因为它很容易设置点击识别器并且它支持开箱即用的高亮显示。 如果我们谈论一个接一个地放置多个视图的简单方法,首先想到的是使用UIStackView——它很容易定制和使用。 最困难的部分是跟踪音频播放并将其与 UI 同步。第一种方法是跟踪播放,当它进入某个转录范围时,在 arrangedSubviewsUIStackView 的同一索引处获取其索引和突出显示按钮。

    【讨论】:

    • 好像UIStackView 没有自动换行符,如果里面的内容超过它的大小,对吧?收藏视图适合这个吗?
    • 是的,您应该手动管理堆栈视图。集合视图绝对适合任何地方,但它的解决方案更复杂。但是,如果您不害怕这一点,那么您将拥有几乎无限的可能性来使用自定义布局。
    【解决方案2】:

    经过一些研究并尝试弄清楚自己,我看到 Otter 使用UITextView 来显示每个句子,他们的想法启发了我。

    我最终用UITextView 和属性文本完成它以获得与它们相同的结果

    为了观看播放时间的变化,我使用键值观察器。每个句子都会观察播放时间,如果时间在句子的时间边界内,则句子会找出其中的哪个单词应该突出显示

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 2013-08-15
      • 2020-07-24
      • 2017-12-12
      • 2011-08-29
      • 2021-05-13
      相关资源
      最近更新 更多