【问题标题】:command center Scrubber on lock screen swift快速锁定屏幕上的命令中心洗涤器
【发布时间】:2018-07-11 14:55:14
【问题描述】:

我正在尝试向命令中心锁定屏幕添加洗涤器,我收到此错误无法分配给值:函数调用返回不可变值我不知道这是什么意思。任何帮助将不胜感激。

这就是我试图改变位置的方式

commandCenter.changePlaybackPositionCommand.addTarget(handler: {
        (event) in
        let event = event as! MPChangePlaybackPositionCommandEvent
        self.player.currentTime() = event.positionTime  // ERROR
        return MPRemoteCommandHandlerStatus.success
    })

【问题讨论】:

    标签: swift xcode mpremotecommandcenter


    【解决方案1】:

    我认为您的播放器属性是 AVPlayer (???),如果是这样,您想使用 seek 函数设置 currentTime,而不是设置函数的返回值...

    self.player.seek(to: CMTimeMakeWithSeconds(event.positionTime, 1000000))
    

    【讨论】:

      【解决方案2】:

      首先,您必须设置 nowPlaying 元数据,并在您更改任何内容时调用它。

      //MARK: setupNowPlaying----------------------------------
      func setupNowPlaying() {
          // Define Now Playing Info
          var nowPlayingInfo = [String : Any]()
          nowPlayingInfo[MPMediaItemPropertyTitle] = self.nowPlayingString
          let image = UIImage(named: "Somni-lockLogo")! // this is the image you want to see on the lock screen
          let artwork = MPMediaItemArtwork.init(boundsSize: image.size,
                                                requestHandler: { (size) -> UIImage in
              return image
          })
          nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = self.player.currentTime
          nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = self.player.duration
          nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = player.rate
          //MARK: now playing
          nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
          nowPlayingInfo[MPMediaItemPropertyArtist ] = self.nowPlayingTitle
          // other metadata exists, check the documentation
        //  nowPlayingInfo[MPMediaItemPropertyArtist] = "David Bowie"
        //  nowPlayingInfo[MPMediaItemPropertyComposer] = "Bill Gates"
          
          // Set the metadata
          MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
      }
      

      然后您需要设置远程传输控件以启用您需要的功能,例如播放暂停跳过等 这是我的功能的开始,它启用东西并包含代码以使洗涤器工作

          func setupRemoteTransportControls() {
          // Get the shared MPRemoteCommandCenter
          let commandCenter = MPRemoteCommandCenter.shared()
          commandCenter.playCommand.isEnabled = true
          commandCenter.pauseCommand.isEnabled = true
           let skipBackwardIntervalCommand: MPSkipIntervalCommand? = commandCenter.skipBackwardCommand
          let skipForwardIntervalCommand: MPSkipIntervalCommand? = commandCenter.skipForwardCommand
          let seekForwardCommand: MPRemoteCommand? = commandCenter.seekForwardCommand
          let seekBackwardCommand: MPRemoteCommand? = commandCenter.seekBackwardCommand
          seekForwardCommand?.isEnabled = true
          seekBackwardCommand?.isEnabled = true
         
          skipBackwardIntervalCommand!.isEnabled = true
          skipForwardIntervalCommand!.preferredIntervals = [60]
          skipBackwardIntervalCommand!.preferredIntervals = [60]
          commandCenter.changePlaybackPositionCommand.isEnabled = true
          
          commandCenter.changePlaybackPositionCommand.addTarget
              { (event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
                  let event = event as! MPChangePlaybackPositionCommandEvent
                  print("change playback",event.positionTime)
                  self.player.currentTime = event.positionTime
                  self.setupNowPlaying()
                  return .success
              }
      

      // 等等,无论你想使用什么都需要一个处理程序,你需要在处理程序中将事件类型设置为正确的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 2013-12-20
        • 2016-05-09
        • 2016-07-04
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多