在我的应用中,我在一个按钮上显示专辑图片。在iPhone 5上,按钮边界大小为273x269.5。我的艺术作品大小的代码一直非常简单,没有任何改变。
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不是nil,可以显示图像)。
任何可能导致此问题的想法?我没有改变任何东西,但代码破了。
答案 0 :(得分:4)
我在iOS8中也看到了我的应用程序中的这个新错误。它只发生在一些白痴,它取决于我的目标大小。似乎这个bug与它有关,它无法通过某种因素来减少图像。例如,我有一些来自iTunes的600x600的图像,当我尝试获得100x100的imageWithSize时,它会在尝试获得200x200的imageWithSize时返回nil。我有一个图像是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"]];
}