2014-10-09 36 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

相关问题