2011-10-19 13 views
17

Actualmente estoy desarrollando una aplicación que muestra qué artista, pista y carátula de álbum está escuchando en el reproductor de música. Todo va bien aparte de cuando toco una canción sin ilustraciones. Quiero poder mostrar mi propia imagen predeterminada (en lugar de mostrar una pantalla en blanco).iOS - MPMediaItem Mostrar una obra de arte predeterminada

Lo que sigue es cómo imaginé que DEBERÍA funcionar, sin embargo, nunca se mete en lo demás, ya que el artículo ¡Trabajo nunca es nulo!

Su ayuda es apreciada.

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

Respuesta

33

MPMediaItemArtwork parece que siempre existe, ni siquiera para las pistas que no tienen obra.

La forma en que detecto si no hay imagen es para ver si la imagen de MPMediaItemArtwork devuelve NULL.

O rejiggering su código un poco:

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

Espero que esta información le ayuda a cabo (y si es así, marque esta respuesta como se comprobó :-)

+1

Gracias Michael, exactamente lo que necesita .. todo tan sencillo ahora! ¡Sería mucho más fácil si todos tuvieran su biblioteca de iTunes como yo! Gracias de nuevo, Ben –

3

Si sólo tiene que comprobar si la obra de arte existe o no (sin posiblemente agarrar la imagen, que quema muchos ciclos de CPU) también puede verificar la propiedad itemArtwork.bounds. Si no existe la obra, los bounds.size.width y bounds.size.height propiedades serán 0:

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

¡Bien, esta será una oportunidad la próxima vez! –

Cuestiones relacionadas