Ios 通过AudioPlayer上的委托方法更新UIProgressView
我正在尝试。这是 下面是Ios 通过AudioPlayer上的委托方法更新UIProgressView,ios,swift,timer,avaudioplayer,cadisplaylink,Ios,Swift,Timer,Avaudioplayer,Cadisplaylink,我正在尝试。这是 下面是MyAudioPlayer类中相关变量的摘要 protocol AudioPlayerDelegate: class { func updateSlider(sender: AudioPlayer) } class AudioPlayer: NSObject { // relevant vars var updater: CADisplayLink? weak var delegate: AudioPlayerDelegate?
MyAudioPlayer
类中相关变量的摘要
protocol AudioPlayerDelegate: class {
func updateSlider(sender: AudioPlayer)
}
class AudioPlayer: NSObject {
// relevant vars
var updater: CADisplayLink?
weak var delegate: AudioPlayerDelegate?
func play() {
// some setup stuff
updater = CADisplayLink(target: self, selector: #selector(delegate?.updateSlider(sender:)))
// regular stuff to play an audio file
}
}
当我在play()
方法中初始化updater
时,编译器说:
#selector
的参数引用实例方法
updateSlider(发送者:)
不暴露于Objective-C
很简单…在func updateSlider(发送方:AudioPlayer)
前面添加objc
,如下所示:
@objc func updateSlider(sender: AudioPlayer)
编译器错误消失了一纳秒,然后我刚刚更新的行显示:
@objc只能与类、@objc协议和类的成员一起使用
类的具体扩展
有,但我还没有找到一个有效的
我尝试在扩展中而不是在协议部分中抛出updateSlider
,但是我一直得到编译器想要在前面添加@objc
,然后想要删除它的乒乓球
我还尝试使用Timer
类的实例而不是CADisplayLink
类来执行此操作,但我遇到了相同的问题
谢谢你的阅读。我欢迎你的建议。可以这样解决:)
丹让我在这个问题上越过了终点线。我需要在协议声明前面添加
@objc
,而不是在我的委托方法前面添加@objc
// First change
@objc protocol AudioPlayerDelegate: class {
@objc func updateSlider(sender: AudioPlayer)
}
在AudioPlayer
类中的下一步
// Delegate declaration
weak var delegate: AudioPlayerDelegate?
// Second Change
if let delegate = delegate {
updater = CADisplayLink(target: delegate, selector: #selector(AudioPlayerDelegate.updateSlider(sender:)))
updater?.preferredFramesPerSecond = 30
updater?.add(to: RunLoop.current, forMode: .commonModes)
}
最后,当使用更新程序时,使其无效并将其置零(最有可能的方式是使用任何停止AVAudioPlayer实例的方法)
updater?.invalidate()
updater = nil
协议需要标记为@objc,而不是其中的方法。此外,显示链接的目标应该是委托
,选择器应该是#选择器(AudioPlayerDelegate.updateSlider(发送方:))
。在将委托传递给显示链接之前,您可能也应该先将其展开,但如果将其传递给nil,我不知道该方法实际上会做什么。就是这样。我展开了委托并初始化了CADisplayLink,但声明协议objc让我越过了终点线。我只是声明了该方法。以answe的形式发布r申请您的25。:)
updater?.invalidate()
updater = nil