iOS 8.x Swift MPRemoteCommandCenter - 禁用音频播放控件
iOS 8.x Swift MPRemoteCommandCenter - Disabling audio playback controls
我目前遇到错误或对 Apple 文档缺乏了解。
一些背景。我正在使用 AVPlayer 来启动音频播放。我正在使用 AVPlayer,因为它可以更精确地控制播放定位(放入歌曲的特定位置)。
当我执行下面的代码时,MPRemoteCommandCenter 只显示一个按钮(play/pause 按钮),所有其他按钮(后退和前进)都不存在。
MPRemoteCommandCenter.sharedCommandCenter().playCommand.addTarget(self, action: "remoteCommandMute")
MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.addTarget(self, action: "remoteCommandMute")
然后我可以切换是否禁用它就好了。然而,根据 Apple 的文档,您应该能够切换启用的 属性 并且它应该完全隐藏按钮而无需向它们添加目标(至少根据我的理解)。这是对 documentation
的引用
如果我不将 .addTarget 代码添加到任何按钮,而只是按照 apple 的说明禁用所述按钮,则它不起作用。
MPRemoteCommandCenter.sharedCommandCenter().previousTrackCommand.enabled = false
MPRemoteCommandCenter.sharedCommandCenter().nextTrackCommand.enabled = false
MPRemoteCommandCenter.sharedCommandCenter().playCommand.enabled = false
MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.enabled = false
基于这种行为,我希望禁用所有三个按钮反过来会使它们隐藏,但这根本不是行为,实际上禁用它们对它们没有影响。您仍然可以按下它们,它们的行为就好像该代码根本不存在一样。但是,如果(如上所述)我将 .addTarget 添加到按钮,如果我将 .enabled 标志设置为 false,它将被禁用。
如果这不是预期的行为,请更正我的 logic/understanding,但在我看来,这绝对是 Apple 的倒退思维。如果我的应用程序不支持暂停前进或后退功能,则该按钮根本不应出现,并且禁用它不应只是将其变为灰色(就像当前那样)。如果您也不向按钮添加目标,它也不应该神奇地隐藏按钮。
附带说明一下,每当我向按钮添加目标时,即使我不希望我的应用程序具有前进和后退功能,它们也能正常工作。
所以在尝试了不同的可用按钮类型和操作之后,文档中的措辞似乎可以更好。为了 "disable and hide" 一个按钮,只需将目标添加到所需的按钮即可。例如,likeCommand.addTarget 禁用并隐藏前面的 pause/play 和前进按钮。但是,如果我将 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 状态
我目前遇到错误或对 Apple 文档缺乏了解。
一些背景。我正在使用 AVPlayer 来启动音频播放。我正在使用 AVPlayer,因为它可以更精确地控制播放定位(放入歌曲的特定位置)。
当我执行下面的代码时,MPRemoteCommandCenter 只显示一个按钮(play/pause 按钮),所有其他按钮(后退和前进)都不存在。
MPRemoteCommandCenter.sharedCommandCenter().playCommand.addTarget(self, action: "remoteCommandMute")
MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.addTarget(self, action: "remoteCommandMute")
然后我可以切换是否禁用它就好了。然而,根据 Apple 的文档,您应该能够切换启用的 属性 并且它应该完全隐藏按钮而无需向它们添加目标(至少根据我的理解)。这是对 documentation
的引用如果我不将 .addTarget 代码添加到任何按钮,而只是按照 apple 的说明禁用所述按钮,则它不起作用。
MPRemoteCommandCenter.sharedCommandCenter().previousTrackCommand.enabled = false
MPRemoteCommandCenter.sharedCommandCenter().nextTrackCommand.enabled = false
MPRemoteCommandCenter.sharedCommandCenter().playCommand.enabled = false
MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.enabled = false
基于这种行为,我希望禁用所有三个按钮反过来会使它们隐藏,但这根本不是行为,实际上禁用它们对它们没有影响。您仍然可以按下它们,它们的行为就好像该代码根本不存在一样。但是,如果(如上所述)我将 .addTarget 添加到按钮,如果我将 .enabled 标志设置为 false,它将被禁用。
如果这不是预期的行为,请更正我的 logic/understanding,但在我看来,这绝对是 Apple 的倒退思维。如果我的应用程序不支持暂停前进或后退功能,则该按钮根本不应出现,并且禁用它不应只是将其变为灰色(就像当前那样)。如果您也不向按钮添加目标,它也不应该神奇地隐藏按钮。
附带说明一下,每当我向按钮添加目标时,即使我不希望我的应用程序具有前进和后退功能,它们也能正常工作。
所以在尝试了不同的可用按钮类型和操作之后,文档中的措辞似乎可以更好。为了 "disable and hide" 一个按钮,只需将目标添加到所需的按钮即可。例如,likeCommand.addTarget 禁用并隐藏前面的 pause/play 和前进按钮。但是,如果我将 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 状态