我正在开发一个音乐应用程序,通过该音乐应用程序,可以选择一个收藏视图单元来播放曲目-我希望该单元在被选择/点击时播放,在第一次选择时播放,在再次被选择/点击时暂停。当选择相同的单元格时,我可以有效地播放和暂停,但是当我选择其他单元格时,就会出现问题。如何分隔逻辑,以便可以发现已选择一个新单元格? (因此可以播放和暂停其他曲目)。我尝试了didSelectItemAt委托方法,但是每次选择该单元格时都会调用该方法,而且我无法弄清楚如何检测是否已选择其他单元格。
换句话说,我正在寻找的行为:轻按单元1-播放曲目1,再次轻按单元1-曲目1暂停或轻按单元1-播放曲目1,单元2被点击-曲目2播放。
任何帮助将不胜感激。
P.S。我正在使用Swift
Visual representation of the App (a collection view where each cell is a seperate track)
编辑
var currentTrack: Int!
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
currentTrack = indexPath.item
switch selected {
case true:
playAudio()
case false:
//Trying to match the current indexPath against the selected cell so I can play and pause that one
if currentTrack != indexPath.item {
playAudio()
} else {
pause()
}
}
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
pointerArray[keys[indexPath.item]] = false
print("Stop", keys[indexPath.item])
}
答案 0 :(得分:0)
您可以使用indexPath来检查正在选择的项目。我将以打印为例,但是您可以添加播放代码的方式。
var songArray = ["SongOne", "SongTwo", "SongThree"]
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(songArray[indexPath.item])
}
编辑
在那种情况下,我将为每首歌曲设置一个字典和一个指针数组,以检查当前曲目是否正在播放。也。如果您想在新曲目开始播放时停止当前曲目,可以使用didDeselectItemAt函数。这是同时使用这两个功能并打印的代码:
var songKeys = ["SongOne", "SongTwo", "SongThree"]
var songArray = ["SongOne" : false, "SongTwo" : false, "SongThree" : false]
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if songArray[songKeys[indexPath.item]] == false {
songArray[songKeys[indexPath.item]] = true
print("Playing", songKeys[indexPath.item])
return
}
songArray[songKeys[indexPath.item]] = false
print("Stop", songKeys[indexPath.item])
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
songArray[songKeys[indexPath.item]] = false
print("Stop", songKeys[indexPath.item])
}