在 Collection View 中使用 AVPlayer 播放音频
Playing Audio using AVPlayer in Collection View
我正在使用 AVPlayer
在 Collection View Cells(Radio App)中播放音频。应用程序工作,但是,如果点击所有单元格上的播放按钮,所有站点一起播放,直到手动停止(请查看两个玩家同时播放的屏幕截图)。
我想做的是,如果按下一个单元格上的播放按钮,其他正在播放的玩家应该停止。任何帮助将不胜感激。
player = AVPlayer(url: "some url")
func togglePlayer() {
if player?.rate != 0 {
player?.pause()
self.playButton.setBackgroundImage(UIImage(systemName: "play.circle"), for: .normal)
} else {
player?.play()
self.playButton.setBackgroundImage(UIImage(systemName: "stop"), for: .normal)
}
}
你可以试试
1- 让播放器 object 在 vc
内
2- 将单元格内按钮的播放动作添加到 vc 最好使用 addTarget
动作
3- 在 vc 中添加当前 playIndex
最初使其成为 nil Int
4- 设置按钮标签为indexPath.row
iside celloForRowAt
播放按钮状态为indexpath.row
是否等于playIndex
或不
5- 在按钮操作内将 playIndex
设置为 sender.tag
6- 刷新 collection 并开始播放选定的 url
我要做的是添加
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
collectionView.indexPathsForSelectedItems?.filter({ [=10=].section == indexPath.section }).forEach({ collectionView.deselectItem(at: [=10=], animated: false) })
return true
}
这样一次只能选择给定部分中的一个单元格
或
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
collectionView.indexPathsForSelectedItems?.forEach({ collectionView.deselectItem(at: [=11=], animated: false) })
return true
}
这将使一次只能选择任何给定部分中的一个单元格。
所以选择您喜欢的那个并在您的自定义单元格中覆盖 isSelected
并使其在 isSelected 为真时播放并在 isSelected 为假时暂停。
public override var isSelected: Bool {
didSet {
switch self.isSelected {
case true:
//play audio
case false:
//pause audio
}
}
}
我正在使用 AVPlayer
在 Collection View Cells(Radio App)中播放音频。应用程序工作,但是,如果点击所有单元格上的播放按钮,所有站点一起播放,直到手动停止(请查看两个玩家同时播放的屏幕截图)。
我想做的是,如果按下一个单元格上的播放按钮,其他正在播放的玩家应该停止。任何帮助将不胜感激。
player = AVPlayer(url: "some url")
func togglePlayer() {
if player?.rate != 0 {
player?.pause()
self.playButton.setBackgroundImage(UIImage(systemName: "play.circle"), for: .normal)
} else {
player?.play()
self.playButton.setBackgroundImage(UIImage(systemName: "stop"), for: .normal)
}
}
你可以试试
1- 让播放器 object 在 vc
内2- 将单元格内按钮的播放动作添加到 vc 最好使用 addTarget
动作
3- 在 vc 中添加当前 playIndex
最初使其成为 nil Int
4- 设置按钮标签为indexPath.row
iside celloForRowAt
播放按钮状态为indexpath.row
是否等于playIndex
或不
5- 在按钮操作内将 playIndex
设置为 sender.tag
6- 刷新 collection 并开始播放选定的 url
我要做的是添加
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
collectionView.indexPathsForSelectedItems?.filter({ [=10=].section == indexPath.section }).forEach({ collectionView.deselectItem(at: [=10=], animated: false) })
return true
}
这样一次只能选择给定部分中的一个单元格 或
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
collectionView.indexPathsForSelectedItems?.forEach({ collectionView.deselectItem(at: [=11=], animated: false) })
return true
}
这将使一次只能选择任何给定部分中的一个单元格。
所以选择您喜欢的那个并在您的自定义单元格中覆盖 isSelected
并使其在 isSelected 为真时播放并在 isSelected 为假时暂停。
public override var isSelected: Bool {
didSet {
switch self.isSelected {
case true:
//play audio
case false:
//pause audio
}
}
}