通过检查状态自动更新Swift中的标签

时间:2015-09-25 07:11:56

标签: ios iphone xcode swift

我是iOS和Swift编程新手。我有一个标签,当StreamingKit框架的状态发生变化时,该标签应自动更新。

目前,当我按下另一个按钮(它再次调用self.updateView()功能)时,标签才会改变,但我希望它在状态发生变化时自动发生,而不是按另一个按钮。

以下是代码:

func updateView() {
    dispatch_async(dispatch_get_main_queue()) {
    if let label = self.bufferingLabel, let button = self.playerButton{
        if let audioPlayer = self.player{
            if(audioPlayer.state == STKAudioPlayerStateBuffering)
            {
                self.playerState = "Loading"
                button.setImage(self.image1, forState: UIControlState.Normal)

            }
            else(audioPlayer.state == STKAudioPlayerStatePlaying)
            {
                self.playerState = self.defaultPlayerState
                self.playerState = "Playing"
                button.setImage(self.image1, forState: UIControlState.Normal)
            }
        label.text = self.playerState!
    }
}

因此,当我按下此按钮时,它会给出第一个状态(正在加载),但在完成后(状态已更改),标签应该更改为播放,但它不会。

@IBAction func pressStart(sender: AnyObject) {
    //declare path to streaming
    let filePath = "http://mp3.streampower.be/mnm-high.mp3"

    if player == nil {
        self.player = STKAudioPlayer()
        self.player?.delegate = self
    }
    if let audioPlayer = player{
        if  (audioPlayer.state == STKAudioPlayerStateReady) ||
            (audioPlayer.state == STKAudioPlayerStateStopped){
                audioPlayer.play(filePath)

        }else{
            audioPlayer.stop()
        }
    }
    self.updateView()


}

我也尝试了一些代表

func audioPlayer(audioPlayer: STKAudioPlayer!, didStartPlayingQueueItemId queueItemId: NSObject!) {
    self.updateView()
}

func audioPlayer(audioPlayer: STKAudioPlayer!, didFinishBufferingSourceWithQueueItemId queueItemId: NSObject!) {
    self.updateView()
}


func audioPlayer(audioPlayer: STKAudioPlayer!, stateChanged state: STKAudioPlayerState, previousState: STKAudioPlayerState) {
    self.updateView()
}

2 个答案:

答案 0 :(得分:0)

您应该查看并使用delegate的{​​{1}}属性。 我不熟悉它,但通常在iOS世界中,这就是你如何从一个对象接收事件(该对象将一些东西委托给你选择的对象)。

答案 1 :(得分:0)

每当流媒体工具包发生变化时,您都可以使用NSNotifications发送信号。然后,您可以向UI视图控制器添加一个观察器,它将在收到信号时触发函数。

如果您想尝试功能性反应式编程,您还可以使用Reactive Cocoa框架来执行类似的信号观察器模式。最后,有一个简单的旧键值观察。其中一个选项应该可以帮助你。