iOS - MPMediaItem Отображение обложки по умолчанию - PullRequest
17 голосов
/ 19 октября 2011

В настоящее время я занимаюсь разработкой приложения, которое показывает, какого исполнителя, дорожки и обложки альбомов вы слушаете в музыкальном проигрывателе. Все идет хорошо, кроме того, что когда я играю песню без рисунков, я хочу иметь возможность показывать свое собственное изображение по умолчанию (вместо того, чтобы показывать пустой экран).

Ниже я представляю, как это ДОЛЖНО работать, но в остальное оно никогда не попадет, так как 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"];
}

Ответы [ 2 ]

34 голосов
/ 19 октября 2011

MPMediaItemArtwork, кажется, существует всегда, даже для треков, в которых нет рисунков.

Чтобы определить, нет ли изображения, нужно проверить, если imageWithSize объекта MPMediaItemArtwork возвращает 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"];
}

Я надеюсь, что эта информация поможет вам (и если да, пометьте этот ответ как проверенный :-)

3 голосов
/ 17 ноября 2013

Если вам просто нужно проверить, существует ли изображение или нет (возможно, не захватывая изображение, которое сжигает много циклов ЦП), вы также можете проверить свойство itemArtwork.bounds. Если изображение не существует, свойства bounds.size.width и bounds.size.height будут равны 0:

MPMediaItemArtwork *artwork = [_item valueForProperty:MPMediaItemPropertyArtwork];
BOOL hasArtwork = (artwork.bounds.size.width > 0 && artwork.bounds.size.height > 0);
...