17

我目前正在开发一个应用程序,显示您在音乐播放器中收听的艺术家、曲目和专辑封面。除了播放一首没有艺术作品的歌曲外,一切都很顺利,我希望能够显示我自己的默认图像(而不是显示空白屏幕)。

下面是我想象它应该如何工作,但是它永远不会进入 else,因为 itemArtwork 永远不会为零!

感谢您的帮助。

谢谢,本

_item = [_player nowPlayingItem];
MPMediaItemArtwork *itemArtwork = [_item valueForProperty:MPMediaItemPropertyArtwork];

if (itemArtwork != nil) {
    UIImage *albumArtworkImage = [itemArtwork imageWithSize:CGSizeMake(250.0, 250.0)];
    _albumArtImageView.image = albumArtworkImage;
} else { // no album artwork
    NSLog(@"No ALBUM ARTWORK");
    _albumArtImageView.image = [UIImage imageNamed:@"kol.jpg"];
}
4

2 回答 2

34

MPMediaItemArtwork 似乎一直存在,即使对于没有艺术作品的曲目也是如此。

我检测是否没有图像的方法是查看 MPMediaItemArtwork 的 imageWithSize 是否返回 NULL。

或者,重新调整您的代码:

_item = [_player nowPlayingItem];
UIImage *albumArtworkImage = NULL;
MPMediaItemArtwork *itemArtwork = [_item valueForProperty:MPMediaItemPropertyArtwork];

if (itemArtwork != nil) {
    albumArtworkImage = [itemArtwork imageWithSize:CGSizeMake(250.0, 250.0)];
}

if (albumArtworkImage) {
    _albumArtImageView.image = albumArtworkImage;
} else { // no album artwork
    NSLog(@"No ALBUM ARTWORK");
    _albumArtImageView.image = [UIImage imageNamed:@"kol.jpg"];
}

我希望此信息对您有所帮助(如果是,请将此答案标记为已选中:-)

于 2011-10-19T18:00:46.147 回答
3

如果您只需要检查艺术品是否存在(不可能抓取图像,这会消耗大量 CPU 周期),您还可以检查itemArtwork.bounds属性。如果艺术品不存在,则bounds.size.widthandbounds.size.height属性将为 0:

MPMediaItemArtwork *artwork = [_item valueForProperty:MPMediaItemPropertyArtwork];
BOOL hasArtwork = (artwork.bounds.size.width > 0 && artwork.bounds.size.height > 0);
于 2013-11-17T15:45:54.040 回答