在AVAudioPlayer声音播放过程中更改UIButton颜色

问题描述 投票:0回答:1

我试图在按下时更改UIButton的颜色。该按钮触发了AVAudioPlayer,我试图使按钮的颜色保持不变,直到声音播放完毕,然后恢复为原始颜色为止。我所拥有的代码一旦按下便会更改按钮的颜色,并在完成声音后保持更改后的颜色,但在播放器不播放时不会恢复原样。

    @IBAction func soundPlay(_ sender: UIButton) {

        soundPlayer?.play()

        if (soundPlayer!.isPlaying == true) {

            playButton.backgroundColor = orangeColorLight
        }
        else {
            playButton.backgroundColor = orangeColor
        }
    }

根据评论中的建议,我试图实现一个audioPlayerDidFinishPlaying委托,但没有成功。不幸的是,关于如何正确实现这一点的文档很少,因此几乎是猜测工作。

    @IBAction func soundPlay(_ sender: UIButton) {

        playButton.backgroundColor = orangeColorLight

        soundPlayer?.play()

        func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer,
                                         successfully flag: Bool){

            playButton.backgroundColor = orangeColor
        }
    }

我上面的逻辑是在按下按钮时设置较浅的颜色>播放声音>使用audioPlayerDidFinishPlaying观看声音以完成播放>改回颜色。

swift xcode colors uibutton avaudioplayer
1个回答
1
投票

当您说play时,您知道声音播放器正在播放,因此没有任何条件跟进。只需更改播放按钮的颜色即可。

您的代码现在为结束。当我们等待声音结束时,不仅要坐在那里观看。没有等待iOS代码之类的东西。 (嗯,在极端情况下有某种情况,但现在不要紧。)您需要的是声音结束时由声音播放器call back

嗯,你可以做到的!将自己设置为播放器的delegate并实现此委托方法:

https://developer.apple.com/documentation/avfoundation/avaudioplayerdelegate/1389160-audioplayerdidfinishplaying

声音结束时会被调用,现在您可以根据需要再次设置颜色。


我刚刚向您展示的内容是您需要在iOS编程中理解的关键概念。您的代码是事件驱动。它不会停下来等待事情;相反,只要发生您感兴趣的事情,您就需要安排收听。可可提供各种活动来告诉您各种各样的事情;您的工作将使用正确的名称在正确的位置放置正确的代码,以便在发生感兴趣的事情时调用您的代码is

© www.soinside.com 2019 - 2024. All rights reserved.