2013-08-25 63 views
5

顯示專輯封面我想從iPod中的庫中的有聲讀物的專輯封面,但我不知道如何使用MPMediaItemPropertyArtwork的iOS:獲取和iPod的圖書館

- (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] 

我還沒有設法找出如何使用它。

+0

的可能重複[無法從MPMediaItemPropertyArtWork獲得的UIImage(http://stackoverflow.com/questions/6604829/not-able-to-get-the-uiimage-from-mpmediaitempropertyartwork) –

+0

這裏是一個有用的參考:https://stackoverflow.com/questions/28979013/how-do-i-get-the-album-artwork-of-the-currently-playing-music-using-swift/48035857#48035857 –

回答

9

你應該能夠通過以下來獲取圖片導入到一個UIImage:

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

在本質上,MPMediaItemPropertyArtwork屬性返回MPMediaItemArtwork然後您可以獲取一個UIImage。

+0

謝謝!就像注意imageWithSize方法似乎不調整圖像的大小,而是返回固定大小的64x64或48x48,也許是我的tableView單元格,但我不這麼認爲。 –

+0

@TomLilletveit正如你暗示的那樣,我懷疑是UITableViewCell決定了UIImage的顯示大小。 –

1

我剛纔已轉換上面的答案斯威夫特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))