2011-10-19 3 views
17

Je suis actuellement en train de développer une application qui montre quel artiste, piste et album d'art que vous écoutez dans le lecteur de musique. Tout va bien, à part quand je joue une chanson sans illustration, je veux être capable de montrer ma propre image par défaut (par opposition à montrer un écran vide). Ce qui suit est la façon dont je l'ai imaginé, il devrait fonctionner mais il ne pénètre jamais dans l'autre comme le itemArtwork n'est jamais nul!iOS - MPMediaItem Afficher une oeuvre par défaut

Vous aide est apprécié.

Merci, Ben

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

Répondre

33

MPMediaItemArtwork semblent toujours exister, même pour les pistes qui n'ont pas l'illustration.

La façon dont je détecte s'il n'y a pas d'image est de voir si imageWithSize de MPMediaItemArtwork renvoie NULL.

Ou, rejiggering votre code un peu:

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

J'espère que cette information vous aide (et si oui, marquer cette réponse comme vérifiée :-)

+1

Merci Michael, exactement ce que je avais besoin .. si simple maintenant! Ce serait beaucoup plus facile si tout le monde gardait leur bibliothèque iTunes comme moi! Merci encore, Ben –

3

Si vous avez juste besoin de vérifier si l'illustration existe ou non (sans éventuellement saisir l'image, ce qui brûle beaucoup de cycles CPU), vous pouvez également vérifier la propriété itemArtwork.bounds. Si l'œuvre n'existe pas, les propriétés bounds.size.width et bounds.size.height seront 0:

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

Nice, va certainement l'essayer la prochaine fois! –

Questions connexes