2014-10-09 42 views
3

在我的應用程序中,我在一個按鈕上顯示專輯圖稿。在iPhone 5上,按鈕邊界大小爲273x269.5。我的代碼大小的藝術作品一直非常簡單,沒有任何改變。imageWithSize在iOS8中使用MPMediaItemArtwork的Flakey

MPMediaItem *currentItem = [musicPlayer nowPlayingItem]; 
MPMediaItemArtwork *iTunesArtwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork]; 

CGSize buttonBounds = self.albumArtworkButton.bounds.size; 
UIImage *resizedImage = [iTunesArtwork imageWithSize: CGSizeMake (buttonBounds.width, buttonBounds.height)]; 

突然與iOS8,執行此結果resizedImage = nil。什麼是真正奇怪的是,如果我改變的最後一行,下面一行的執行:

UIImage *resizedImage = [iTunesArtwork imageWithSize: CGSizeMake (300, 300)]; 

導致有效的圖像(即resizedImage不是零,可以顯示的圖像)。

任何想法可能會導致這種情況?我沒有改變任何東西,但代碼破裂了。

回答

4

我在iOS8中看到了這個新的錯誤,也有我的應用程序。這只是發生了一些coverart,它取決於我的目標大小。看起來這個bug與它有關,它不能通過某些因素來減少圖像。例如,我有一些來自iTunes的600x600圖像,當我嘗試獲取100x100的imageWithSize時,它會返回nil,同時嘗試獲取200x200的imageWithSize作品。我有一個圖像是200x203和100x100不起作用,101x101不起作用,但102x102將起作用 - 我想也許你想要的最高分辨率需要超過原始尺寸的1/2以避免錯誤,但是根據在200x200下工作的600x600圖像,結果並非如此。也許是它的總內存大小的變化或類似的東西 - 無論如何,很難弄清楚爲什麼一個錯誤發生時,你沒有他們的來源,所以我不再猜測和使用這種解決方法。基本上只需在通過imageWithSize請求UIImage時使用MPMediaItemArtwork對象的原始邊界。然後確保UIImage使用的UIImageView將contentMode設置爲正確顯示圖像(UIViewContentModeScaleAspectFill,UIViewContentModeScaleAspectFit,UIViewContentModeScaleToFill)。

// display album artwork 
MPMediaItemArtwork* artwork = [representativeItem valueForProperty:MPMediaItemPropertyArtwork]; 
CGRect bounds = [artwork bounds]; 
UIImage* artworkImage = [artwork imageWithSize:bounds.size]; 
if (artworkImage) 
{ 
    [cell.imageView setImage:artworkImage]; 
} 
else 
{ 
    [cell.imageView setImage:[UIImage imageNamed:@"AlbumDefault.png"]]; 
} 
+0

在imageView上設置contentMode並不能解決問題。你有袖手旁觀嗎?不幸的是,手動調整原始大小的圖像的速度非常緩慢。 – wstr 2015-07-08 17:15:46

相關問題