Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 8.x Swift MPRemoteCommandCenter-禁用音频播放控制_Ios_Swift_Audio_Playback - Fatal编程技术网

iOS 8.x Swift MPRemoteCommandCenter-禁用音频播放控制

iOS 8.x Swift MPRemoteCommandCenter-禁用音频播放控制,ios,swift,audio,playback,Ios,Swift,Audio,Playback,我目前正在经历一个bug或者对苹果的文档缺乏理解 一些背景。我正在使用AVPlayer启动音频播放。我之所以使用AVPlayer,是因为它提供了对播放位置的更精确控制(放入歌曲的特定位置) 当我实现下面的代码时,MPRemoteCommandCenter只显示一个按钮(播放/暂停按钮),而所有其他按钮(后退和前进)都不存在 MPRemoteCommandCenter.sharedCommandCenter().playCommand.addTarget(self, action: "remo

我目前正在经历一个bug或者对苹果的文档缺乏理解

一些背景。我正在使用AVPlayer启动音频播放。我之所以使用AVPlayer,是因为它提供了对播放位置的更精确控制(放入歌曲的特定位置)

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

  MPRemoteCommandCenter.sharedCommandCenter().playCommand.addTarget(self, action: "remoteCommandMute")
  MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.addTarget(self, action: "remoteCommandMute")
然后,我可以切换它是禁用还是不正常。但是,根据苹果的文档,您应该能够切换enabled属性,并且它应该完全隐藏按钮,而无需向按钮添加目标(至少据我所知)。以下是对

如果我没有在任何按钮中包含.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,它会将所述按钮显示为灰色

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

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
属性与状态不一样

,因此在试验了不同的可用按钮类型和操作后,文档中的措辞可能会更好。为了“禁用和隐藏”按钮,只需将目标添加到所需的按钮。例如,likeCommand.addTarget禁用并隐藏先前的暂停/播放和前进按钮。但是,如果我将playCommand.enabled设置为false,它会将所述按钮显示为灰色。您能详细说明一下吗?你添加了一个空动作的目标吗?嘿@yogur,我已经有一段时间没有看过这个代码库了,但我相信你可以将它设置为nil。一旦你这样做了,那么enabled属性实际上将与文档状态一样工作。@yogur我已经更新了我的答案,以反映一些示例代码来演示我所说的内容。我还包括了文档参考。请注意,在发表此评论时,代码是用Swift 2.0编写的,MPCommandCenter的实现可能已经发生了更改。我已经试过了,但由于某种原因它不起作用:/我以为你的方法与我试过的不同。感谢更新+1