UIImageView изображение меняется с разными песнями - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть простой медиаплеер, и я пытаюсь заставить его изменить изображение обложки при изменении песен.С кодом, который у меня есть сейчас, он будет отображать обложку, когда вы нажмете кнопку воспроизведения, но когда я нажму следующую кнопку, чтобы перейти к следующему элементу, он останется прежним, если вы не нажмете другую кнопку.

Как изменить изображение UIImageView при изменении элемента мультимедиа песни?

import UIKit
import MediaPlayer

class ViewController: UIViewController {
    @IBOutlet weak var coverImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        createQueue()
    }

    func showArt(){
    coverImageView.image = 
    myMediaPlayer.nowPlayingItem?.artwork!.image(at: CGSize.init(width: 500, height: 500))
    coverImageView.isUserInteractionEnabled = true
    }

    @IBAction func playButton(_ sender: UIButton) {
    togglePlay(on: sender)
    showArt()
    }

    @IBAction func backButton(_ sender: UIButton) {
    back()
    }

    @IBAction func nextButton(_ sender: UIButton) {
    skip()
    }

}

Другие мои функции:

import MediaPlayer

let myMediaPlayer = MPMusicPlayerApplicationController.systemMusicPlayer

let playDrake = MPMediaPropertyPredicate(value: "Drake", forProperty: MPMediaItemPropertyArtist, comparisonType: MPMediaPredicateComparison.equalTo)

let myFilterSet: Set<MPMediaPropertyPredicate> = [playDrake]

func createQueue() {
        let drakeQuery = MPMediaQuery(filterPredicates: myFilterSet)
        myMediaPlayer.setQueue(with: drakeQuery)
}

func skip() {
        myMediaPlayer.skipToNextItem()
}

func back() {
        if myMediaPlayer.currentPlaybackTime > 0.05 {
            myMediaPlayer.skipToPreviousItem()
        } else if myMediaPlayer.currentPlaybackTime < 0.05 {
            myMediaPlayer.skipToBeginning()
        } else {
            //do nothing
        }
    }


func togglePlay(on: UIButton) {
        if myMediaPlayer.playbackState.rawValue == 2 || myMediaPlayer.playbackState.rawValue == 0 {
            on.setTitle("Pause", for: UIControlState.normal)
            myMediaPlayer.play()
        } else if myMediaPlayer.playbackState.rawValue == 1{
            on.setTitle("Play", for: UIControlState.normal)
            myMediaPlayer.pause()
        } else {
            // do nothing
        }
    }

1 Ответ

0 голосов
/ 11 сентября 2018

Попробуйте загрузить изображение асинхронно

DispatchQueue.global(qos: .background).async {
    myMediaPlayer.nowPlayingItem?.artwork!.image(at: CGSize.init(width: 500, height: 500))
}
...