Med tillgång till musikbibliotek kan dina applikationer inkludera dina användares låtar, ljudböcker och podcastsamlingar. Denna funktion kan användas för att förbättra spelningen genom att låta användarna spela egna ljudspår, bygga anpassade mediaspelare och mer!
OBS! För att testa denna funktionalitet behöver du en fysisk iOS-enhet och måste vara medlem i det betalda iOS-utvecklarprogrammet.
Öppna Xcode och välj? Skapa ett nytt Xcode-projekt ?. Välj? Visningsbaserad applikation? och klicka? nästa ?. Ange ett namn för ditt projekt (jag ringde min? Musik?), Ange din företagsidentifierare, se till att du väljer iPhone för enhetsfamilj och klicka sedan på? Nästa ?. Välj ett ställe för att spara ditt projekt och klicka på? Skapa?.
Välj navigationsområdet i Xcode 4, välj projektnamnet (i vårt fall? Musik?). Välj sedan det aktuella målet (? Musik? Här igen) och välj sedan? Byggfaser? flik. Expandera? Länka binära med bibliotek? alternativet och klicka sedan på? +? knappen för att lägga till en ny ram. Skriv? MediaPlayer "i sökrutan och välj MediaPlayer.framework alternativ som visas i listan. Klicka? Lägg till? att inkludera denna ram i länkfasen av ditt projekt.
Nu när du har lagt till mediespelarramen i ditt projekt måste du importera den här rammen till den visningsstyrenhet som ska använda iPod
bibliotek. Gå till MusicViewController.h fil och sätt in följande rad kod under UIKit #importera
linje:
#importera#importera
Ladda ner källkoden och dra bildkartan till ditt projekt. Se till att kryssrutan är markerad Kopiera objekt till destinationsgruppens mapp (om det behövs) är kontrollerad. Den här kartan innehåller de bilder vi ska använda i den här appen.
I "musik" mapp i "Project Navigator"? klicka på MusicViewController.xib.
Dra en UIImageView från biblioteket till vyn. Kontrollera att verktygsfönstret visas och gå till Storleksinspektör. Ställ in både bredden och höjden till 200, x-koordinatet till 60 och y-koordinaten till 20. Denna bildvy visar låtarna.
Dra nu en UISlider till vyn och ordna den med de blå ledlinjerna längst ner i vyn. Gör det också lite bredare, så det använder hela bredden av vyn mellan de två blåa riktlinjerna. Vi använder den här reglaget för att justera volymen.
Dra nu 4 UIButtons till vyn. Dra den första under bildvyn och ställ in titeln till? Visa Media Picker ?. Den här kommer att göra precis vad texten säger. De övriga tre knapparna är kontrollknapparna. Välj de övriga tre knapparna och gå till Attribut Inspector. Ställ in typen till Beställnings och ställ in respektive knapps bild till PreviousButton.png, PlayButton.png och NextButton.png. Ordna knapparna enligt nedan.
Slutligen dra tre UILabels till vyn. Ta bort texten på alla etiketter och ordna dem som nedan (jag lade till lite text så att du kan se var etiketten är. Du behöver inte lägga till texten). Dessa etiketter visar viss information om den aktuella spellistan.
Nu när vi har utformat gränssnitt, kan vi göra anslutningarna. Klicka på mittknappen på redigeraren för att visa biträdande redaktör .
Klicka på bildvyn och CTRL-dra till gränssnittet. En popup kommer att visas. Skriv in texten? ArtworkImageView? för namn och klicka sedan på? ansluta.?
Nu Klicka på reglaget och anslut det på samma sätt, men namnge det? VolumeSlider ?. Ctrl-dra igen från reglaget till gränssnittet, men den här gången under de lockiga axlarna. Ställ in anslutningen till Åtgärd istället för Outlet. Ange? VolumeChanged? för namnet och se till att händelsen är värdeändrad och klicka på? anslut?.
Dessa 4 knappar behöver också åtgärder. Anslut dem på samma sätt som skjutreglaget var anslutet. Namn åtgärderna enligt följande:
Uppspelningsknappen behöver också ett uttag. Anslut den på samma sätt som vi kopplade uttaget för bildvyn, men namnger det? PlayPauseButton?.
Äntligen måste vi skapa uttag för etiketterna. Anslut dem igen på samma sätt som vi kopplade bildutsiktet. Namn den första etiketten? TitleLabel ?, den andra etiketten? ArtistLabel? och den sista etiketten? albumLabel?.
Nu ska koden för filen MusicViewController.h läsa på följande sätt:
#importera#importera @interface MusicTestViewController: UIViewController IBOutlet UIImageView * artworkImageView; IBOutlet UISlider * volymSlider; IBOutlet UIButton * playPauseButton; IBOutlet UILabel * titleLabel; IBOutlet UILabel * artistLabel; IBOutlet UILabel * albumLabel; - (IBAction) volymChanged: (id) avsändare; - (IBAction) showMediaPicker: (id) avsändare; - (IBAction) tidigareSong: (id) avsändare; - (IBAction) playPause: (id) avsändare; - (IBAction) nextSong: (id) avsändare; @slutet
Bygg och kör koden för att försäkra dig om att appen går bra. Appen visar bara gränssnittet som vi just skapat, men knapparna fungerar inte.
Gå till MusicViewController.h fil och ändra koden för att läsa enligt följande:
#importera#importera @interface MusicTestViewController: UIViewController IBOutlet UIImageView * artworkImageView; IBOutlet UISlider * volymSlider; IBOutlet UIButton * playPauseButton; IBOutlet UILabel * titleLabel; IBOutlet UILabel * artistLabel; IBOutlet UILabel * albumLabel; MPMusicPlayerController * musicPlayer; @property (nonatomic, behåll) MPMusicPlayerController * musicPlayer; - (IBAction) volymChanged: (id) avsändare; - (IBAction) showMediaPicker: (id) avsändare; - (IBAction) tidigareSong: (id) avsändare; - (IBAction) playPause: (id) avsändare; - (IBAction) nextSong: (id) avsändare; - (void) registerMediaPlayerNotifications; @slutet
Som du kan se lägger vi till MPMediaPickerControllerDelegate och skapade en MPMusicPickerController. Vi har också lagt till metoden registerMediaPlayerNotifications för registrering av meddelanden från mediaspelaren.
Gå nu till MusicViewController.m fil och syntetisera musikspelaren genom att lägga till följande kod under @genomförande :
@synthesize musicPlayer;
Vi måste också släppa det i dealloc
och viewDidUnload
metod med följande kod:
[musicPlayer release];
Gå nu till viewDidLoad
metod. Oöverträffad det och lägg till följande kod under [super viewDidLoad];
musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
Här ställer vi in vår musikspelarekontroll till en iPodMusicPlayer. Det innebär att vår app delar iPod-staten och om vi avslutar vår app fortsätter musiken. ApplicationMusicPlayer är den andra typen. Denna musikspelare spelar musiken lokalt i din app. Din musikspelare kan ha ett annat nu spelande objekt än den inbyggda iPod-appen. När du avslutar appen slutar musiken spela.
Lägg till följande kod till viewDidLoad
metod:
[volumeSlider setValue: [musicPlayer volume]]; om ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] förState: UIControlStateNormal]; else [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal];
Först ställer vi in nuvarande värde för reglaget till musikspelarens aktuella volym. Volymen är ett värde mellan 0 och 1. Om volymen är 0 finns inget ljud och volymen är 1 när volymen är max. Därefter kontrollerar vi att musikspelaren spelar något. Om det spelar ställer vi bilden av playPauseButton till pauseButton-bilden och när den inte spelas ställer vi in bilden av playPauseButton till playButton-bilden.
Lägg till följande kod till viewDidLoad
metod:
[självregistreringMediaPlayerNotifications];
Den här raden kommer att ringa till registerMediaPlayerNotifications
metod där vi kommer att registrera tre observatörer för mediaspelarens anmälningar. Lägg till följande kod under viewDidLoad
metod:
- (void) registerMediaPlayerNotifications NSNotificationCenter * notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver: self selector: @selector (handle_NowPlayingItemChanged :) namn: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: musicPlayer]; [notificationCenter addObserver: self selector: @selector (handle_PlaybackStateChanged :) namn: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: musicPlayer]; [notificationCenter addObserver: self selector: @selector (handle_VolumeChanged :) namn: MPMusicPlayerControllerVolumeDidChangeNotification object: musicPlayer]; [musicPlayer startGeneratingPlaybackNotifications];
Här registrerar vi tre observatörer för mediaspelarmeddelandena. Den första är för MPMusicPlayerControllerNowPlayingItemDidChangeNotification
. Vi använder detta för att uppdatera aktuell information om medieobjekt. Den andra är för MPMusicPlayerControllerPlaybackStateDidChangeNotification
, Vi använder även den här för att uppdatera vårt användargränssnitt. Den tredje och den sista är för MPMusicPlayerControllerVolumeDidChangeNotification
, Vi kommer att använda den här för att uppdatera det aktuella värdet av vår skjutreglage.
När du registrerar en observatör bör du också vara säker på att ta bort den i viewDidUnload
och den dealloc
metoder. Lägg till följande kod på båda dessa sätt:
[[NSNotificationCenter defaultCenter] removeObserver: namn: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: namn: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: namn: MPMusicPlayerControllerVolumeDidChangeNotification object: musicPlayer]; [musicPlayer endGeneratingPlaybackNotifications];
Lägg till följande kod under registerMediaPlayerNotifications
metod:
- (void) handle_NowPlayingItemChanged: (id) notification MPMediaItem * currentItem = [musicPlayer nowPlayingItem]; Ullmage * artworkImage = [UIImage imageNamed: @ "noArtworkImage.png"]; MPMediaItemArtwork * artwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork]; om (konstverk) artworkImage = [artwork imageWithSize: CGSizeMake (200, 200)]; [artworkImageView setImage: artworkImage]; NSString * titleString = [currentItem valueForProperty: MPMediaItemPropertyTitle]; om (titleString) titleLabel.text = [NSString stringWithFormat: @ "Titel:% @", titleString]; else titleLabel.text = @ "Titel: Okänd titel"; NSString * artistString = [currentItem valueForProperty: MPMediaItemPropertyArtist]; om (artistString) artistLabel.text = [NSString stringWithFormat: @ "Artist:% @", artistString]; else artistLabel.text = @ "Artist: Unknown artist"; NSString * albumString = [currentItem valueForProperty: MPMediaItemPropertyAlbumTitle]; om (albumString) albumLabel.text = [NSString stringWithFormat: @ "Album:% @", albumString]; else albumLabel.text = @ "Album: Okänt album";
Denna metod kommer att svara på MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
underrättelse. Först skapar vi en MPMediaItem och sätter den till nowPlayingItem. Då skapar vi en UImage som heter artworkImage. Som standard ställer vi bilden till noArtworkImage. Då skapar vi ett MPMediaItemArtwork-objekt som lagrar konstverket av det aktuella objektet. Om det finns konstverk sätter vi artworkImage till konstverket. Slutligen sätter vi artworkImageView-bilden till artworkImage.
Då skapar vi en NSString med butiker titeln på currentItem. Återigen, vi kontrollerar om currentItem har en titel. Om det har en titel ställer vi tittleLabel till den här titeln. Om currentItem inte har en titel ställer vi upp titeln till? Okänd ?. Vi gör detsamma med artisten och albumet.
Vi använde bara konstverk, titel, artist och album egenskaper här, men det finns många fler egenskaper som texter, betyg och kompositör.
Lägg till följande kod under handle_NowPlayingItemChanged:
metod:
- (void) handle_PlaybackStateChanged: (id) notification MPMusicPlaybackState playbackState = [musicPlayer playbackState]; om (playbackState == MPMusicPlaybackStatePaused) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] förState: UIControlStateNormal]; annars om (playbackState == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] forState: UIControlStateNormal]; annars om (playbackState == MPMusicPlaybackStateStopped) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal]; [musicPlayer stop];
Denna metod kommer att svara på MPMusicPlayerControllerPlaybackStateDidChangeNotification:
underrättelse. Här kontrollerar vi tillståndet för musikspelaren och uppdaterar bilden av playPauseButton. Som du kan se stoppar vi musikspelaren om dess tillstånd är MPMusicPlaybackStateStopped. Vi gör detta för att säkerställa att musikspelaren kommer att spela sin kö från början.
Till sist lägg till följande kod under handle_PlaybackStateChanged:
metod:
- (void) handle_VolumeChanged: (id) notification [volumeSlider setValue: [musicPlayer volume]];
Denna metod kommer att svara på MPMusicPlayerControllerVolumeDidChangeNotification:
underrättelse. Här uppdaterar vi värdet för volymreglaget till musikspelarens volym. Det gör vi för att vi också kan justera volymen med hårdvaruknapparna.
Gå till volumeChanged:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) volymChanged: (id) avsändare [musicPlayer setVolume: [volumeSlider value]];
Här ställer vi in volymen på musikspelaren till värdet av reglaget.
Gå nu till PLAYPAUSE:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) playPause: (id) avsändare om ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [musicPlayer paus]; annars [musicplayer play];
Först kontrollerar vi om musikspelaren spelar. Om det spelas kommer vi pausa musikspelaren. Om musiken inte spelar börjar vi spela musiken.
Gå nu till previousSong:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) tidigareSong: (id) avsändare [musicPlayer skipToPreviousItem];
Här låter vi musikspelaren hoppa över till föregående artikel.
Äntligen, gå till nästa låt:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) nextSong: (id) avsändare [musicPlayer skipToNextItem];
Här låter vi musikspelaren hoppa över till nästa objekt.
Det sista vi behöver göra är att visa mediaplockaren och spela en låt om användaren plockade en eller flera låtar. Gå till showMediaPicker:
åtgärd och ändra koden för att läsa enligt följande:
- (IBAction) showMediaPicker: (id) avsändare MPMediaPickerController * mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny]; mediaPicker.delegate = self; mediaPicker.allowsPickingMultipleItems = JA; mediaPicker.prompt = @ "Välj sånger som ska spelas"; [self presentModalViewController: mediaPicker animated: YES]; [mediaPicker release];
Först skapar vi en media picker controller och sätter sin delegat till sig själv. Vi tillåter också användaren att välja flera objekt. Snabbt är texten som kommer att visas när mediaväljaren visar. Jag ställde in prompten för att välja låtar att spela ?. Sedan visar vi mediaplockaren och släpper den.
Lägg till följande kod under showMediaPicker
: åtgärd:
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection if (mediaItemCollection) [musicPlayer setQueueWithItemCollection: mediaItemCollection]; [musikspelare spelar]; [self dismissModalViewControllerAnimated: YES]; - (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker [self dismissModalViewControllerAnimated: YES];
Den första metoden kallas när användaren väljer en låt. I den här metoden kontrollerar vi om det finns samling av medieobjekt och om det finns en samling med medieobjekt ställer vi in musikspelarens kö till den samlade medieobjekten och börjar spela. Vi avvisar alltid media picker-kontrollenheten. Den andra metoden avvisar bara mediaspelarens kontroller.
Klicka på Bygg och kör för att testa programmet. Du kan välja en låt om du trycker på Visa Media Picker knapp. Du ser titel, artist, album och konstverk av den aktuella låten. Om du justerar volymen med hårdvaruknapparna kan du se att reglaget ändras.
Tack för att du läste denna handledning om tillgång till iPod-bibliotek! Om du har frågor eller kommentarer om denna handledning, lämna dem i kommentarfältet nedan!