Невозможно установить обложку альбома в качестве цвета фона

Я вытащил image из album artwork выбранной песни, используя MPMediaItemArtwork, и я пытаюсь установить это произведение в качестве изображения background аналогично тому, как это настроено spotify, однако я продолжаю получать две ошибки.

Не удается присвоить значение типа «UIColor» типу значения «UIColor?»

так же как

Не удалось найти перегрузку для «init», которая принимает предоставленные аргументы.

И вот мой код ниже

func setAlbumCover(){

   var AlbumImage = MPMediaItemArtwork()

    self.view.backgroundColor = UIColor(patternImage: UIImage(named: AlbumImage)!)

    if !UIAccessibilityIsReduceTransparencyEnabled() {
        self.view.backgroundColor = UIColor.clearColor()
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.ExtraLight)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = self.view.bounds
        self.view.addSubview(blurEffectView) //if you have more UIViews on screen, use insertSubview:belowSubview: to place it underneath the lowest view instead

        //add auto layout constraints so that the blur fills the screen upon rotating device
        blurEffectView.setTranslatesAutoresizingMaskIntoConstraints(false)
        self.view.addConstraint(NSLayoutConstraint(item: blurEffectView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0))
        self.view.addConstraint(NSLayoutConstraint(item: blurEffectView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0))
        self.view.addConstraint(NSLayoutConstraint(item: blurEffectView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0))
        self.view.addConstraint(NSLayoutConstraint(item: blurEffectView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0))
    } else {
        self.view.backgroundColor = UIColor.whiteColor()
    }

}

Я знаю, что, вероятно, у меня есть какая-то глупая ошибка, но я не могу ее понять.


person Matt Carlson    schedule 06.08.2015    source источник


Ответы (1)


Вы создаете UIImage, вызывая UIImage(named:), который ожидает строку, и вы передаете экземпляр MPMediaItemArtwork. Это собирается скомпилировать:

let albumArtwork = MPMediaItemArtwork()
let size = CGSize(width: 250, height: 250)
let image = albumArtwork.imageWithSize(size)
self.view.backgroundColor = UIColor(patternImage: image!)

Также обратите внимание, что вы устанавливаете цвет фона, а затем меняете его через несколько строк, чтобы изображение не отображалось:

self.view.backgroundColor = UIColor(patternImage: image!)
if !UIAccessibilityIsReduceTransparencyEnabled() {
    self.view.backgroundColor = UIColor.clearColor()
    // ... some more code ....
} else {
    self.view.backgroundColor = UIColor.whiteColor()
}
person libec    schedule 06.08.2015
comment
Итак, как мне исправить первую часть? - person Matt Carlson; 06.08.2015
comment
предоставить изображение для UIColor(patternImage:), полученное от MPMediaItemArtwork, не само произведение искусства. Код выше не работает? Вы действительно загружаете MPMediaItemArtwork из музыкальной библиотеки или создаете ее таким образом? - person libec; 06.08.2015