锁定屏幕上的命令中心洗涤器 swift
command center Scrubber on lock screen swift
我正在尝试将 scrubber 添加到命令中心锁定屏幕,我收到此错误 无法分配给值:函数调用 returns 不可变值 我不知道知道这是什么意思。任何帮助将不胜感激。
这就是我试图改变位置的方式
commandCenter.changePlaybackPositionCommand.addTarget(handler: {
(event) in
let event = event as! MPChangePlaybackPositionCommandEvent
self.player.currentTime() = event.positionTime // ERROR
return MPRemoteCommandHandlerStatus.success
})
我认为你的播放器 属性 是一个 AVPlayer (???),如果是这样你想使用 seek 函数来设置 currentTime,而不是设置函数中的 return 值...
self.player.seek(to: CMTimeMakeWithSeconds(event.positionTime, 1000000))
首先,您必须设置 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
}
// 等等等等无论你想使用什么都需要一个处理程序,你需要在处理程序中将事件类型设置为正确的类型。
我正在尝试将 scrubber 添加到命令中心锁定屏幕,我收到此错误 无法分配给值:函数调用 returns 不可变值 我不知道知道这是什么意思。任何帮助将不胜感激。
这就是我试图改变位置的方式
commandCenter.changePlaybackPositionCommand.addTarget(handler: {
(event) in
let event = event as! MPChangePlaybackPositionCommandEvent
self.player.currentTime() = event.positionTime // ERROR
return MPRemoteCommandHandlerStatus.success
})
我认为你的播放器 属性 是一个 AVPlayer (???),如果是这样你想使用 seek 函数来设置 currentTime,而不是设置函数中的 return 值...
self.player.seek(to: CMTimeMakeWithSeconds(event.positionTime, 1000000))
首先,您必须设置 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
}
// 等等等等无论你想使用什么都需要一个处理程序,你需要在处理程序中将事件类型设置为正确的类型。