无法从 MPMediaItemPropertyArtWork 获取 UIImage
Posted
技术标签:
【中文标题】无法从 MPMediaItemPropertyArtWork 获取 UIImage【英文标题】:Not able to get the UIImage from MPMediaItemPropertyArtWork 【发布时间】:2011-07-07 01:18:08 【问题描述】:我有以下代码从 MPMediaItemPropertyArtWork 获取 UIImage 以在我的视图中显示封面艺术。我从 mediaItem 中获得了非 NULL 图稿,但是,当我尝试从图稿中提取 UIImage 时,它返回 NULL 并且我在 UIImageView 中看不到任何内容。任何帮助将不胜感激。
CGSize artworkSize = CGSizeMake(30, 30);
UIImage *artworkImage;
MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork];
if (artwork)
NSLog(@"artwork available");
artworkImage = [artwork imageWithSize:artworkSize];
else
NSLog(@"artwork not available");
artworkImage = [UIImage imageNamed:@"EmptyAlbum.png"];
NSLog(@"artworkImage = %@", artworkImage);
coverArtView.image = artworkImage;
【问题讨论】:
您找到解决方案了吗? MPMediaItemArtwork is null while cover is available in iTunes的可能重复 【参考方案1】:试试这个 - 使用 UItableview 来显示专辑详细信息。
声明 MPMediaItemCollection *userMediaCollection;
-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
[self setUserMediaCollection:mediaItemCollection];
[self dismissModalViewControllerAnimated:YES];
MPMediaItem *mItem = (MPMediaItem *)[userMediaCollection.items objectAtIndex:indexPath.row];
MPMediaItemArtwork *artWork = [mItem valueForProperty:MPMediaItemPropertyArtwork];
cell.imageView.image = [artWork imageWithSize:CGSizeMake(30, 30)];
其中 userMediaCollection 是您的 MPMediaItemCollection
【讨论】:
感谢 Karthikeyan。但我看不出您的代码与我发布的代码有何不同。事实上是一样的。我看到的问题是此代码在与 iTunes 同步(转移购买)后完美运行,但在同步之前无法正常运行。如果我从 iPhone 上的 iTunes 购买歌曲,然后启动我的应用程序,则此代码不会显示任何图像。但如果我与 iTunes 同步,则同样有效。不知道同步时会发生什么变化。 我看到的是代码在我的 iPad 上运行,但在我的 iPhone 上运行不了。【参考方案2】:试试这个...它是工作。
CGSize artworkSize = CGSizeMake(30, 30);
UIImage *artworkImage;
MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork];
artworkImage = [artwork imageWithSize:artworkSize];
if (artworkImage == nil)
NSLog(@"artwork not available");
artworkImage = [UIImage imageNamed:@"EmptyAlbum.png"];
coverArtView.image = artworkImage;
【讨论】:
【参考方案3】:我知道这个问题现在有点老了,但是对于任何发现这个问题的人来说,这可能会有所帮助:
我为此苦苦思索了几个小时,因为在我的应用程序中的一个视图控制器中获取艺术品,但在我的 UITableViewController 中却没有。我的代码在这两种情况下看起来完全一样(并且与你的非常相似),除了一件事情:
let albumArtImage = albumArt.imageWithSize(cell.imageView.bounds.size)
尺寸! (很抱歉用 Swift 写这个,但你明白了)。这听起来很愚蠢,但 MPMediaItemArtwork 拒绝给我一个小图像。我实际上只是将其更改为更大的尺寸,如下所示:
let albumArtImage = albumArt.imageWithSize(CGSize(width: 150, height: 150))
它奏效了。无论如何,您都可以调整 UIImage 的大小以满足您的需要。
如果有人发现这个并且这个(愚蠢的)解决方案有效,请通过回复或其他方式告诉我。
【讨论】:
这也是我注意到的。您还应该提交一个雷达,因为这似乎是一个 ios 8 错误。 你是怎么得到albumArt
的?是MPMediaItemArtwork
吗?
见原问题的第 3 行。【参考方案4】:
如何初始化 MPMusicPlayerController?应该是:
MPMusicPlayerController *player = [MPMusicPlayerController iPodMusicPlayer];
【讨论】:
【参考方案5】:查看答案:https://***.com/a/26463261/883413
似乎是一个 iOS 错误。如果返回的图像为零,请尝试使用原图尺寸。
UIImage *image = [artwork imageWithSize:size];
if (image == nil)
image = [artwork imageWithSize:artwork.bounds.size];
【讨论】:
以上是关于无法从 MPMediaItemPropertyArtWork 获取 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
DateTimeParseException:无法解析文本:无法从 TemporalAccessor 获取 LocalDateTime