【问题标题】:AVPlayer UIButton - show play or pause image button depending on whether the stream is on or offAVPlayer UIButton - 根据流是打开还是关闭显示播放或暂停图像按钮
【发布时间】:2021-11-09 11:19:45
【问题描述】:

我有一个应用程序,它正在播放带有两个图像按钮的 url mp3 音频 - 播放和停止。现在我想稍微改进一下。我现在有两个 .png 图像(play.png 和 pause.png),我希望它们可以根据流是打开还是关闭来相互更改。任何想法如何制作它?这是我的代码:

import UIKit
import AVKit
import MediaPlayer

class ViewController: UIViewController, AVAudioPlayerDelegate {
    
    var player : AVPlayer!
    var dict = NSDictionary()
    
    
    
    
    @IBAction func playButtonPressed(_ sender: UIButton){
        let url = "https://stream.com/radio.mp3"
        do {
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: [])
            print("Playback OK")
            try AVAudioSession.sharedInstance().setActive(true)
            print("Session is Active")
        } catch {
            print(error)
        }
        
            player = AVPlayer(url: URL(string: url)!)
            player.volume = 1.0
            player.rate = 1.0
            player.play()
        
    
    }
    
    
    
    @IBAction func stopButtonStopped(sender: UIButton) {
        player.pause()
    }

【问题讨论】:

    标签: ios swift uibutton avplayer avkit


    【解决方案1】:

    我的错误是我试图在 sender.setImage(playImage, for: .normal 中添加 pause.png 和 play.png 而不是在 let keword 中声明它:

    let play = UIImage(named: "play.png")
    

    实际起作用的代码是:

    @IBAction func buttonPressed(_ sender: UIButton){
              
              if isPlaying {
                   player.pause()
                   sender.setImage(pauseImage, for: .normal)
              } else {
                   let url = "https://stream.com/radio.mp3"
                   do {
                        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
                        try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: [])
                        print("Playback OK")
                        try AVAudioSession.sharedInstance().setActive(true)
                        print("Session is Active")
                   } catch {
                        print(error)
                   }
                   
                   player = AVPlayer(url: URL(string: url)!)
                   player.volume = 1.0
                   player.rate = 1.0
                   player.play()
                   sender.setImage(playImage, for: .normal)
              }
              
              isPlaying.toggle()
         }
    

    【讨论】: