Подтвердить что ты не робот

IOS - MPMediaItem Отображает изображение по умолчанию

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

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

Ответ 1

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"];
}

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

Ответ 2

Если вам просто нужно проверить, существует ли произведение или нет (без захвата изображения, которое сжигает много циклов процессора), вы также можете проверить свойство 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);