【问题标题】:iOS 8.x Swift MPRemoteCommandCenter - Disabling audio playback controlsiOS 8.x Swift MPRemoteCommandCenter - 禁用音频播放控件
【发布时间】:2023-03-21 21:48:01
【问题描述】:

我目前遇到错误或对 Apple 文档缺乏了解。

一些背景。我正在使用 AVPlayer 来启动音频播放。我使用 AVPlayer 是因为它可以更精确地控制播放定位(放入歌曲的特定位置)。

当我实现下面的代码时,MPRemoteCommandCenter 只显示一个按钮(播放/暂停按钮),而所有其他按钮(后退和前进)都不存在。

  MPRemoteCommandCenter.sharedCommandCenter().playCommand.addTarget(self, action: "remoteCommandMute")
  MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.addTarget(self, action: "remoteCommandMute")

然后我可以切换它是否被禁用。但是根据Apple的文档,您应该能够切换启用的属性,并且它应该完全隐藏按钮而无需向它们添加目标(至少根据我的理解)。这里是对documentation的引用

如果我没有在任何按钮中包含 .addTarget 代码,并且只需按照苹果的说明禁用所述按钮,它就不起作用。

    MPRemoteCommandCenter.sharedCommandCenter().previousTrackCommand.enabled = false
    MPRemoteCommandCenter.sharedCommandCenter().nextTrackCommand.enabled = false
    MPRemoteCommandCenter.sharedCommandCenter().playCommand.enabled = false
    MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.enabled = false

基于这种行为,我希望禁用所有三个按钮反过来会使它们隐藏,但这根本不是行为,实际上禁用它们对它们没有影响。您仍然可以按下它们,它们的行为就好像该代码根本不存在一样。但是,如果(如上所述)我将 .addTarget 添加到按钮,如果我将 .enabled 标志设置为 false,它将被禁用。

如果这不是预期的行为,请纠正我的逻辑/理解,但在我看来,这绝对是苹果公司的倒退思维。如果我的应用程序不支持暂停前进或后退功能,则按钮根本不应该出现并且禁用它不应该只是将其变为灰色(就像它目前所做的那样)。如果您也不向按钮添加目标,它也不应该神奇地隐藏按钮。

附带说明,每当我向按钮添加目标时,即使我不希望我的应用程序具有前进和后退功能,它们也能正常工作。

【问题讨论】:

  • 所以在尝试了不同的可用按钮类型和操作之后,似乎文档中的措辞可能会更好。为了“禁用和隐藏”按钮,只需将目标添加到所需按钮即可。例如,likeCommand.addTarget 禁用先前的暂停/播放和前进按钮并隐藏它们。但是,如果我将 playCommand.enabled 设置为 false,它会将所述按钮显示为灰色。

标签: ios swift audio playback


【解决方案1】:

因此,在尝试了不同的可用按钮类型和操作之后,文档中的措辞似乎会更好。为了“禁用和隐藏”按钮,只需将目标添加到所需按钮即可。例如,likeCommand.addTarget 禁用先前的暂停/播放和前进按钮并隐藏它们。但是,如果我将 playCommand.enabled 设置为 false,它会将所述按钮显示为灰色。

编辑:为了解决实际上不共享我所指的代码...

import UIKit
import PlaygroundSupport
import MediaPlayer
class MyViewController : UIViewController {
    private let remote: MPRemoteCommandCenter = MPRemoteCommandCenter.shared()
    override func loadView() {
        remote.playCommand.addTarget(self, action: #selector(playPause))
        remote.playCommand.isEnabled = false
    }

    @objc private func playPause() {

    }
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

这演示了所概述的问题,即切换isEnabled 属性与documentation 状态不同

【讨论】:

  • 你能详细说明一下吗?您是否添加了具有空操作的目标?
  • 嘿@yogur,自从我查看此代码库以来已经有一段时间了,但我相信您可以将其设置为零。执行此操作后,启用的属性将实际按照文档所述工作。
  • @yogur 我已经更新了我的答案以反映一些示例代码来演示我在说什么。我还包括了文档参考。请注意,在发表此评论时,代码是用 Swift 2.0 编写的,MPCommandCenter 的实现可能已经改变
  • 啊,我明白了。我已经尝试过,但是由于某种原因它不起作用:/我认为您的方法与我尝试的方法不同。感谢您的更新 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
相关资源
最近更新 更多