Командный центр Scrubber на экране блокировки Swift

Я пытаюсь добавить скруббер на экран блокировки командного центра, но получаю сообщение об ошибке Невозможно присвоить значение: вызов функции возвращает неизменяемое значение. Я не знаю, что это значит. Любая помощь будет оценена по достоинству.

Вот как я пытаюсь изменить позицию

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

person Iam Wayne    schedule 11.07.2018    source источник


Ответы (2)


Я думаю, что ваше свойство игрока является AVPlayer (???), и если это так, вы хотите использовать функцию поиска для установки currentTime, а не для установки возвращаемого значения из функции...

self.player.seek(to: CMTimeMakeWithSeconds(event.positionTime, 1000000))
person Popmedic    schedule 11.07.2018

Во-первых, вам нужно настроить метаданные 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
        }

// и т. д. и т. д. все, что вы хотите использовать, нуждается в обработчике, и вам нужно установить правильный тип события в обработчике.

person SundialSoft    schedule 22.06.2020