iOS: получение и отображение обложек альбомов из библиотеки iPod

Я хочу получить обложку альбома аудиокниги из библиотеки iPod, но не понимаю, как пользоваться MPMediaItemPropertyArtwork

- (NSArray *)audiobooks
{
    MPMediaPropertyPredicate *abPredicate =
    [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeAudioBook]
                                     forProperty:MPMediaItemPropertyMediaType];

    MPMediaQuery *abQuery = [[MPMediaQuery alloc] init];
    [abQuery addFilterPredicate:abPredicate];
    [abQuery setGroupingType:MPMediaGroupingAlbum];
    NSArray *books = [abQuery collections];
    return books;
}

- (MPMediaItem *)mediaItemForRow: (NSInteger)row
{
    NSArray *audiobooks = self.audiobooks;
    MPMediaItem *mediaItem = nil;

    for (id object in audiobooks) {
        if ([object isKindOfClass:[MPMediaItemCollection class]]) {
            MPMediaItemCollection *book = (MPMediaItemCollection *)object;

            id item = [book items][row];
            if ([item isKindOfClass:[MPMediaItem class]]) {
                mediaItem = (MPMediaItem *)item;

            }
        }
    }
    return mediaItem;
}

Итак, теперь я могу получить заголовок элемента мультимедиа следующим образом:

NSString *title = [mediaItem valueForProperty:MPMediaItemPropertyArtist];

Но как мне получить обложку, чтобы отобразить ее в UIImage? есть это свойство:

[mediaItem valueForProperty:MPMediaItemPropertyArtwork]

Мне так и не удалось узнать, как им пользоваться.


person Tom Lilletveit    schedule 25.08.2013    source источник
comment
возможный дубликат Не удалось получить UIImage из MPMediaItemPropertyArtWork   -  person John Parker    schedule 25.08.2013
comment
Вот полезная ссылка: stackoverflow.com/questions/28979013/   -  person J-Dizzle    schedule 30.12.2017


Ответы (2)


Вы должны иметь возможность получить обложку в UIImage с помощью следующего:

MPMediaItemArtwork *itemArtwork = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *artworkUIImage = [itemArtwork imageWithSize:CGSizeMake(64, 64)];

По сути, свойство MPMediaItemPropertyArtwork возвращает MPMediaItemArtwork, который вы можете затем получите UIImage из.

person John Parker    schedule 25.08.2013
comment
Спасибо! как примечание, метод imageWithSize, похоже, не изменяет размер изображения, а вместо этого возвращает фиксированный размер 64x64 или 48x48, возможно, что-то связано с моей ячейкой tableView, но я так не думаю. - person Tom Lilletveit; 25.08.2013
comment
@TomLilletveit Как вы подразумеваете, я подозреваю, что именно UITableViewCell определяет отображаемый размер UIImage. - person John Parker; 25.08.2013

Я только что преобразовал приведенный выше ответ в Swift 3:

let songInfo: MPMediaItem = self.arrSongs[indexPath.row] as! MPMediaItem

// Информация о песне — это элемент мультимедиа.

 let itemArtwork :MPMediaItemArtwork  = songInfo.artwork!
 cell.songImg.image = itemArtwork.image(at: CGSize(width: 50, height: 50))
person Ketan P    schedule 30.06.2017