在我的应用程序中,我在一个按钮上显示相册艺术作品。在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,并且可以显示图像)。
有什么想法可能导致这种情况吗?我什么都没改,但密码坏了。
我的应用程序在iOS8中也看到了这个新错误。这种情况只发生在一些工作服上,这取决于我的目标尺寸。这个错误似乎与它无法将图像缩小某些因素有关。例如,我从iTunes中获得了一些600x600的图像,当我尝试获得100x100的imageWithSize时,它返回nil,而尝试获得200x200的imageWithSize则有效。我有一个图像是200x203,100x100不工作,101x101不工作,但102x102会工作——我认为你想要的最高分辨率可能需要超过原始尺寸的1/2才能避免错误,但基于在200x200下工作的600x600图像,这并不是真的。也许是总内存大小的变化或类似的事情——无论如何,当你没有错误的来源时,很难弄清楚为什么会发生错误,所以我停止了猜测,并使用了这个解决方法。当您通过imageWithSize请求UIImage时,基本上只使用MPMediaItemArtwork对象的原始边界。然后确保与UIImage一起使用的UIImageView的contentMode设置为正确显示图像(UIViewContentModeScaleAspectFill、UIViewContentmodeScaleAspect Fit、UIViewContent ModeScaleToFill)。
// 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"]];
}