【问题标题】:Audio Player in Container/XiB SwiftContainer/XiB Swift 中的音频播放器
【发布时间】:2018-09-30 09:43:43
【问题描述】:

我正在为我的应用开发用于流式传输音乐的自定义音频播放器,我需要它出现在我应用底部的每个屏幕上。为此,我使用了UIContainerView 和后来的xib,但在这两种情况下都面临同样的问题:

  • 当转至另一个AudioPlayer 的 VC 进度时 - 标签和进度条中显示的时间不会更新,但正在播放音乐。

此外,如果我在该容器中执行 segue 后按下播放,播放器音频开始播放另一首曲目和先前的播放。

此时我已经开发了播放器,它只在一个 VC 中运行良好。

我的问题是如何让它在每个屏幕上都能正常工作?

我的应用的结构: 7 个 VC 与 segues 连接,在每个屏幕的底部都有一个容器视图连接到一个带有播放器的 VC。

提前感谢您的帮助!

【问题讨论】:

    标签: ios swift audio avfoundation media-player


    【解决方案1】:

    每次使用 segue 时,都会在旧视图之上加载新视图 - 这就是为什么您可以听到仍在隐藏视图中播放的音频。

    当您在视图之间来回切换时,您实际上并没有在视图之间来回移动,您是在旧视图之上加载新视图 - 随着应用程序的增长和变得越来越复杂,这可能会导致严重的问题。

    所以我会更改应用程序的结构,而不是通过 Segues 连接的 7 个 VC - 拥有 1 个具有大容器视图的主 VC,并将这 6 个其他 VC 加载到容器视图中。

    首先在 Storyboard 上创建一个新的视图控制器,然后在新的视图控制器中放置一个容器视图。让容器填满大部分视图,除了音乐播放器所在的位置。删除通过拖动容器创建的视图控制器 - 你不需要它。

    为了使这变得简单,将导航控制器拖到 Storyboard 上,它将生成 2 个视图,但继续删除表格视图。 Control+Drag 从 ContainerView 到 Navigation 控制器,然后选择“Embed”选项。然后控制从导航控制器拖动到您原来的主 ViewController 并选择“根视图控制器”。现在,当您单击容器中的 segue 时,它​​只会更改容器中的视图。

    【讨论】:

    • 这是绝妙的解决方案。我已经尝试过了,它有效!非常感谢您的帮助和如此出色的解释。我已经和这个球员战斗了一个星期。我会将您的答案标记为已接受!
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 2014-12-08
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多