gpt4 book ai didi

ios - AVAudioPlayer 播放完毕时切换桌面 View 单元格图像

转载 作者:行者123 更新时间:2023-11-30 13:10:32 25 4
gpt4 key购买 nike

我有一个表格 View ,每个单元格都有一个播放按钮。播放按钮是一个在播放和暂停图像之间切换的 UIButton。当按下播放/暂停按钮时,AVAudioPlayer 播放/暂停与单元格关联的音频文件。到目前为止,我的图像完美切换并与音频播放器同步。但是,当音频播放完毕后,我希望图像切换回其默认状态 - 播放按钮图像。

//View controller containing tableview
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = self.audioTable.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! AudioCell

let track = self.sectionTracks[indexPath.row]

cell.playButton.addTarget(self, action: #selector(HomeController.playPausePressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)

var playButtonImage = UIImage(named: "TableViewCellPlayButton84.jpg")
var pauseButtonImage = UIImage(named: "TableViewCellPauseButton84.jpg")
playButtonImage = playButtonImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
pauseButtonImage = pauseButtonImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

cell.playButton.setImage(playButtonImage, forState: UIControlState.Normal)
cell.playButton.setImage(pauseButtonImage, forState: UIControlState.Selected)
cell.playButton.selected = false

return cell
}

func playPausePressed(sender:UIButton) {

let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.audioTable)
let cellIndexPath = self.audioTable.indexPathForRowAtPoint(pointInTable)
let track = self.sectionTracks[cellIndexPath!.row]

//Handle AVAudioPlayer play/pause functionality
}

//Custom tableview cell file
@IBAction func playPausePressed(sender: UIButton!) {

if (sender.selected)
{
sender.selected = false
}
else{
sender.selected = true
}
}

最佳答案

您可以订阅成为 AVAudioPlayer 的委托(delegate),然后检查音频何时完成。您可以一次播放多个文件吗?如果您可以播放多个音频,则必须跟踪所有正在播放的音频,然后根据代理被触发的时间以及播放器与哪一行关联来切换该行上的按钮。如果您只能播放一个,那么当用户开始播放音频时,只需保存该行,当音频结束时,切换该行的按钮。

https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioPlayerDelegateProtocolReference/

private var xoAssociationKey: UInt8 = 0

extension AVAudioPlayer {
var name: String! {
get {
return objc_getAssociatedObject(self, &xoAssociationKey) as? String
}
set(newValue) {
objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}

按上述方式进行扩展以将名称存储到 AVAudioPlayer 实例可能会有所帮助。然后,您可以跟踪正在播放的音频的名称以及可变字典中单元格的索引路径。当您收到对委托(delegate)函数的回调时,您可以在字典中查找 player.name将为您返回该按钮单元格的索引路径。从表格 View 中获取单元格,然后切换按钮的选定状态。

编辑

对于一次播放的单个单元格,您可以向类中添加一个变量,如 var PlayingAudioIndexPath:NSIndexPath?

当音频开始播放时,将其设置为所单击按钮的单元格索引路径。

然后在播放完成事件中,只需抓取单元格并切换按钮

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer,
successfully flag: Bool) {
guard let indexPath = self.playingAudioIndexPath,
cell = self.table.cellForRowAtIndexPath(indexPath) as? AudioCell else {
return;
}

cell.playButton.selected = false
self.playingAudioIndexPath = nil
}

DMCApps

关于ios - AVAudioPlayer 播放完毕时切换桌面 View 单元格图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38779679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com