gpt4 book ai didi

ios - 在不同的类中接收委托(delegate)方法

转载 作者:行者123 更新时间:2023-11-28 12:18:53 24 4
gpt4 key购买 nike

我正在使用 Jukebox 开发音乐播放器图书馆。它有一个委托(delegate)团,当歌曲持续时间/当前时间等发生变化时警告元素。在 Jukebox 示例中,所有代码都在 ViewController 中。因此,例如当当前时间改变时,它也会改变 slider 值。我想创建一个可供多个 ViewController 使用的播放器类。当我将委托(delegate)方法放入此模型类中时。我怎样才能在 ViewController 类中找到它们?

第一个屏幕截图是第一个 ViewController,它具有委托(delegate)方法和初始化播放器。

MainViewController我需要访问 secondViewController 中的委托(delegate)方法来更新 UI。

class ViewController: UIViewController, JukeboxDelegate {

var jukebox : Jukebox!

override func viewDidLoad() {
super.viewDidLoad()
configureUI()

// begin receiving remote events
UIApplication.shared.beginReceivingRemoteControlEvents()

// configure jukebox
jukebox = Jukebox(delegate: self, items: [
JukeboxItem(URL: URL(string: "http://www.kissfm.ro/listen.pls")!),
JukeboxItem(URL: URL(string: "http://www.noiseaddicts.com/samples_1w72b820/2514.mp3")!),
JukeboxItem(URL: URL(string: "http://www.noiseaddicts.com/samples_1w72b820/2958.mp3")!)
])!
}
// MARK:- JukeboxDelegate -

func jukeboxDidLoadItem(_ jukebox: Jukebox, item: JukeboxItem) {
print("Jukebox did load: \(item.URL.lastPathComponent)")
}

func jukeboxPlaybackProgressDidChange(_ jukebox: Jukebox) {

if let currentTime = jukebox.currentItem?.currentTime, let duration = jukebox.currentItem?.meta.duration {
let value = Float(currentTime / duration)
slider.value = value
populateLabelWithTime(currentTimeLabel, time: currentTime)
populateLabelWithTime(durationLabel, time: duration)
} else {
resetUI()
}
}

func jukeboxStateDidChange(_ jukebox: Jukebox) {

UIView.animate(withDuration: 0.3, animations: { () -> Void in
self.indicator.alpha = jukebox.state == .loading ? 1 : 0
self.playPauseButton.alpha = jukebox.state == .loading ? 0 : 1
self.playPauseButton.isEnabled = jukebox.state == .loading ? false : true
})

if jukebox.state == .ready {
playPauseButton.setImage(UIImage(named: "playBtn"), for: UIControlState())
} else if jukebox.state == .loading {
playPauseButton.setImage(UIImage(named: "pauseBtn"), for: UIControlState())
} else {
volumeSlider.value = jukebox.volume
let imageName: String
switch jukebox.state {
case .playing, .loading:
imageName = "pauseBtn"
case .paused, .failed, .ready:
imageName = "playBtn"
}
playPauseButton.setImage(UIImage(named: imageName), for: UIControlState())
}

print("Jukebox state changed to \(jukebox.state)")
}

func jukeboxDidUpdateMetadata(_ jukebox: Jukebox, forItem: JukeboxItem) {
print("Item updated:\n\(forItem)")
}

最佳答案

如果您想从任何地方使用音乐播放器 View

  1. 你应该编写播放器类,播放文件的所有代码都应该在这个类中,只需要从任何地方传递列表数组就可以播放。并使用自定义委托(delegate)在播放器 View 中进行适当的响应

    <
  2. 为 UI 创建一个 View Controller ,您可以在任何类中显示它,这样您就可以在应用程序的任何位置调用

关于ios - 在不同的类中接收委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45482481/

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