Med tilgang til musikkbiblioteket kan programmene inneholde sangene, lydbøkene og podcastsamlingene til brukerne. Denne funksjonaliteten kan brukes til å forbedre gameplayen ved at brukerne kan spille eget lydspor, bygge tilpassede mediaspillerprogrammer og mer!
MERK: For å teste denne funksjonaliteten trenger du en fysisk iOS-enhet og må være medlem av det betalte IOS-utviklerprogrammet.
Åpne Xcode og velg? Opprett et nytt Xcode-prosjekt ?. Velg? Visningsbasert applikasjon? og klikk? neste ?. Skriv inn et navn for prosjektet ditt (jeg ringte min? Musikk?), Skriv inn bedriftsidentifikatoren din, pass på at du velger iPhone for enhetsfamilie, og klikk deretter? Neste ?. Velg et sted for å lagre prosjektet ditt og klikk? Opprett?.
I navigatorområdet til Xcode 4 velger du prosjektnavnet (i vårt tilfelle? Musikk?). Velg deretter det nåværende målet (? Musikk? Her igjen), og velg deretter? Byggfaser? fane. Utvid? Link binær med biblioteker? alternativet, og klikk deretter på? +? knappen for å legge til et nytt rammeverk. Skriv? MediaPlayer "i søkeboksen, og velg MediaPlayer.framework alternativet som vises i listen. Klikk? Legg til? å inkludere dette rammeverket i lenkefasen av prosjektet ditt.
Nå som du har lagt til mediespillerenes rammeverk i prosjektet ditt, må du importere det rammeverket til visningskontrolleren som vil bruke iPod
bibliotek. Gå til MusicViewController.h fil og sett inn følgende linje kode under UIKit #importere
linje:
#importere#importere
Last ned kildekoden og dra bildekartet til prosjektet ditt. Pass på at avkrysningsboksen er lagt til Kopier element til målgruppens mappe (om nødvendig) er sjekket. Dette kartet inneholder bildene vi vil bruke i denne appen.
I? Musikken? mappe i "Project Navigator"? klikk på MusicViewController.xib.
Dra en UIImageView fra biblioteket til visningen. Kontroller at verktøyvinduet vises og gå til Størrelsesinspektør. Sett både bredden og høyden til 200, x-koordinatet til 60 og y-koordinatet til 20. Dette bildevisningen viser sangteksten.
Dra nå en UISlider til visningen og ordne den med de blå styrelinjene nederst på visningen. Gjør det også litt bredere, så det bruker hele bredden på visningen mellom de to blå retningslinjene. Vi bruker denne skyveknappen for å justere volumet.
Dra nå 4 UIButtons til visningen. Dra den første under bildevisningen og sett tittelen til? Vis medievalg ?. Denne vil gjøre akkurat hva teksten sier. De andre tre knappene vil være kontrollknappene. Velg de tre andre knappene og gå til Attributtsinspektør. Sett typen til Tilpasset og angi bildet av knappene henholdsvis til PreviousButton.png, PlayButton.png og NextButton.png. Ordne knappene som nedenfor.
Til slutt trekker du tre UILabels til visningen. Slett teksten til alle etikettene og ordne dem som nedenfor (jeg la til litt tekst, slik at du kan se hvor etikettene er. Du trenger ikke å legge til denne teksten). Disse etikettene vil vise litt informasjon om den nåværende sangen.
Nå som vi har designet utgrensesnitt, kan vi gjøre forbindelsene. Klikk på midtknappen til redigeringsprogrammet for å vise assisterende redaktør .
Klikk på bildevisningen og CTRL-dra til grensesnittet. En popup vil vise. Skriv inn teksten? ArtworkImageView? for navn og klikk deretter? Koble til.?
Nå Klikk glidebryteren og koble den på samme måte, men navngi den? VolumeSlider ?. CTRL-dra igjen fra glidebryteren til grensesnittet, men denne gangen under de krøllete båndene. Sett tilkoblingen til Handling i stedet for Outlet. Skriv inn? Volumkrang? for navnet og pass på at hendelsen er verdsatt, og klikk på? Koble til?.
Disse 4 knappene trenger også handlinger. Koble dem på samme måte som skyvekontrollen var koblet til. Oppgi handlingene som følger:
Spilleknappen trenger også et uttak. Koble den på samme måte som vi koblet uttaket til bildevisningen, men nevner det? PlayPauseButton?.
Til slutt må vi lage uttak for etikettene. Koble dem igjen på samme måte som vi koblet til bildeutsiktet. Navn den første etiketten? TitleLabel ?, den andre etiketten? ArtistLabel? og den siste etiketten? albumLabel?.
Nå skal koden for MusicViewController.h-filen leses som følger:
#importere#importere @interface MusicTestViewController: UIViewController IBOutlet UIImageView * artworkImageView; IBOutlet UISlider * volumeSlider; IBOutlet UIButton * playPauseButton; IBOutlet UILabel * titleLabel; IBOutlet UILabel * artistLabel; IBOutlet UILabel * albumLabel; - (IBAction) volumKoblet: (id) avsender; - (IBAction) showMediaPicker: (id) avsender; - (IBAction) forrigeSong: (id) avsender; - (IBAction) playPause: (id) avsender; - (IBAction) nextSong: (id) avsender; @slutt
Bygg og kjør koden for å sikre at appen går bra. Appen viser bare grensesnittet vi nettopp har opprettet, men knappene fungerer ikke.
Gå til MusicViewController.h fil og endre koden for å lese som følger:
#importere#importere @interface MusicTestViewController: UIViewController IBOutlet UIImageView * artworkImageView; IBOutlet UISlider * volumeSlider; IBOutlet UIButton * playPauseButton; IBOutlet UILabel * titleLabel; IBOutlet UILabel * artistLabel; IBOutlet UILabel * albumLabel; MPMusicPlayerController * musicPlayer; @property (nonatomic, behold) MPMusicPlayerController * musicPlayer; - (IBAction) volumChanged: (id) avsender; - (IBAction) showMediaPicker: (id) avsender; - (IBAction) forrigeSong: (id) avsender; - (IBAction) playPause: (id) avsender; - (IBAction) nextSong: (id) avsender; - (ugyldig) registerMediaPlayerNotifications; @slutt
Som du kan se, la vi til MPMediaPickerControllerDelegate og opprettet en MPMusicPickerController. Vi har også lagt til metoden registerMediaPlayerNotifications for registrering av varsler fra mediespilleren.
Gå nå til MusicViewController.m fil og syntetiser musicPlayer ved å legge til følgende kode under @gjennomføring :
@synthesize musicPlayer;
Vi må også frigjøre den i dealloc
og viewDidUnload
metode med følgende kode:
[musicPlayer release];
Gå nå til viewDidLoad
metode. Uncomment det og legg til følgende kode under [super viewDidLoad];
musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
Her setter vi vår musikkspillerkontroller til en iPodMusicPlayer. Dette betyr at vår app deler iPod-tilstanden, og hvis vi avslutter vår app, fortsetter musikken å spille. ApplicationMusicPlayer er den andre typen. Denne musikkspilleren spiller musikken lokalt i appen din. Din musikkspiller kan ha et annet nåspillingselement enn den innebygde iPod-appen. Når du avslutter appen, slutter musikken å spille.
Legg til følgende kode i viewDidLoad
metode:
[volumeSlider setValue: [musicPlayer volume]]; hvis ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] forState: UIControlStateNormal]; ellers [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal];
Først setter vi gjeldende verdi av glidebryteren til musikkspillerens nåværende volum. Volum er en verdi mellom 0 og 1. Hvis volumet er 0, er det ingen lyd og når volumet er 1, er volumet på maksimum. Deretter sjekker vi at musikkspilleren spiller noe. Hvis det spiller, setter vi bildet av playPauseButton til pauseButton-bildet og når det ikke spilles, stiller vi bildet av playPauseButton til playButton image.
Legg til følgende kode i viewDidLoad
metode:
[selvregistreringMediaPlayerNotifications];
Denne linjen vil ringe til registerMediaPlayerNotifications
Metode hvor vi vil registrere tre observatører for mediespillermeldingene. Legg til følgende kode under viewDidLoad
metode:
- (void) registerMediaPlayerNotifications NSNotificationCenter * notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver: selector: @selector (handle_NowPlayingItemChanged :) navn: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: musicPlayer]; [notificationCenter addObserver: selector: @selector (handle_PlaybackStateChanged :) navn: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: musicPlayer]; [notificationCenter addObserver: selector: @selector (handle_VolumeChanged :) navn: MPMusicPlayerControllerVolumeDidChangeNotification object: musicPlayer]; [musicPlayer startGeneratingPlaybackNotifications];
Her registrerer vi tre observatører for mediespillermeldingene. Den første er for MPMusicPlayerControllerNowPlayingItemDidChangeNotification
. Vi vil bruke dette til å oppdatere gjeldende medieelementinformasjon. Den andre er for MPMusicPlayerControllerPlaybackStateDidChangeNotification
, Vi bruker også denne til å oppdatere brukergrensesnittet vårt. Den tredje og den siste er for MPMusicPlayerControllerVolumeDidChangeNotification
, Vi vil bruke denne til å oppdatere gjeldende verdi av skyveknappen vår.
Når du registrerer en observatør, bør du også være sikker på å fjerne den i viewDidUnload
og dealloc
metoder. Så legg til følgende kode for begge disse metodene:
[[NSNotificationCenter defaultCenter] removeObserver: selvnavn: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: selvnavn: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: navn: MPMusicPlayerControllerVolumeDidChangeNotification object: musicPlayer]; [musicPlayer endGeneratingPlaybackNotifications];
Legg til følgende kode under registerMediaPlayerNotifications
metode:
- (void) handle_NowPlayingItemChanged: (id) varsel MPMediaItem * currentItem = [musicPlayer nowPlayingItem]; Ullmage * artworkImage = [UIImage imageNamed: @ "noArtworkImage.png"]; MPMediaItemArtwork * artwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork]; hvis (kunstverk) artworkImage = [artwork imageWithSize: CGSizeMake (200, 200)]; [artworkImageView setImage: artworkImage]; NSString * titleString = [currentItem valueForProperty: MPMediaItemPropertyTitle]; hvis (titleString) titleLabel.text = [NSString stringWithFormat: @ "Tittel:% @", titleString]; else titleLabel.text = @ "Tittel: Ukjent tittel"; NSString * artistString = [currentItem valueForProperty: MPMediaItemPropertyArtist]; if (artistString) artistLabel.text = [NSString stringWithFormat: @ "Artist:% @", artistString]; else artistLabel.text = @ "Artist: Ukjent artist"; NSString * albumString = [currentItem valueForProperty: MPMediaItemPropertyAlbumTitle]; hvis (albumString) albumLabel.text = [NSString stringWithFormat: @ "Album:% @", albumString]; else albumLabel.text = @ "Album: Ukjent album";
Denne metoden vil svare på MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
melding. Først oppretter vi en MPMediaItem og setter den til nowPlayingItem. Deretter lager vi en UIImage kalt artworkImage. Som standard angir vi bildet til noArtworkImage. Deretter oppretter vi et MPMediaItemArtwork-objekt som lagrer kunstverket til gjeldende element. Hvis det er kunstverk, setter vi artworkImage til kunstverket. Til slutt setter vi artworkImageView-bildet til artworkImage.
Deretter oppretter vi en NSString med butikker tittelen på currentItem. Igjen, vi sjekker om currentItem har en tittel. Hvis den har en tittel, setter vi tittelen til tittelen. Hvis dagensItem ikke har en tittel, setter vi tittelen på? Ukjent ?. Vi gjør det samme med kunstner og album.
Vi brukte bare kunstverk, tittel, artist og albumegenskaper her, men det er mange flere egenskaper som tekster, vurdering og komponist.
Legg til følgende kode under handle_NowPlayingItemChanged:
metode:
- (void) handle_PlaybackStateChanged: (id) varsel MPMusicPlaybackState playbackState = [musicPlayer playbackState]; hvis (playbackState == MPMusicPlaybackStatePaused) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal]; annet hvis (playbackState == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] forState: UIControlStateNormal]; annet hvis (playbackState == MPMusicPlaybackStateStopped) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal]; [musicPlayer stopper];
Denne metoden vil svare på MPMusicPlayerControllerPlaybackStateDidChangeNotification:
melding. Her kontrollerer vi tilstanden til musikkspilleren og oppdaterer bildet av playPauseButton. Som du kan se stopper du musikkspilleren hvis tilstanden er MPMusicPlaybackStateStopped. Vi gjør dette for å sikre at musikkspilleren vil spille sin kø fra starten.
Til slutt legger du til følgende kode under handle_PlaybackStateChanged:
metode:
- (ugyldig) handle_VolumeChanged: (id) varsel [volumeSlider setValue: [musicPlayer volume]];
Denne metoden vil svare på MPMusicPlayerControllerVolumeDidChangeNotification:
melding. Her oppdaterer vi volumregulatorens verdi til volumet til musikkspilleren. Vi gjør dette fordi vi også kan justere volumet med maskinvareknappene.
Gå til volumeChanged:
handling og endre koden for å lese som følger:
- (IBAction) volumeChanged: (id) sender [musicPlayer setVolume: [volumeSlider value]];
Her setter vi volumet på musikkspilleren til verdien av skyveknappen.
Gå nå til playPause:
handling og endre koden for å lese som følger:
- (IBAction) playPause: (id) avsender if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [musicPlayer pause]; ellers [musicPlayer play];
Først sjekker vi om musikkspilleren spiller. Hvis det spilles, vil vi stoppe musikkavspilleren. Hvis musikken ikke spiller, begynner vi å spille av musikken.
Gå nå til previousSong:
handling og endre koden for å lese som følger:
- (IBAction) forrigeSong: (id) avsender [musicPlayer skipToPreviousItem];
Her lar vi musikkspilleren hoppe over til forrige gjenstand.
Til slutt, gå til nextSong:
handling og endre koden for å lese som følger:
- (IBAction) nextSong: (id) avsender [musicPlayer skipToNextItem];
Her lar vi musikkspilleren hoppe over til neste gjenstand.
Det siste vi må gjøre er å vise medieplukkeren og spille en sang dersom brukeren plukket en eller flere sanger. Gå til showMediaPicker:
handling og endre koden for å lese som følger:
- (IBAction) showMediaPicker: (id) avsender MPMediaPickerController * mediaPicker = [[MPMediaPickerController alloker] initWithMediaTypes: MPMediaTypeAny]; mediaPicker.delegate = self; mediaPicker.allowsPickingMultipleItems = JA; mediaPicker.prompt = @ "Velg sanger som skal spilles"; [self presentModalViewController: mediaPicker animated: YES]; [mediaPicker release];
Først oppretter vi en medieplukkerkontroller og setter sin delegat til seg selv. Vi tillater også at brukeren velger flere elementer. Prompten er teksten som vil bli vist når mediavalgeren viser. Jeg stiller spørsmålet om å velge sanger å spille ?. Deretter viser vi medieplukkeren og slipper den.
Legg til følgende kode under showMediaPicker
: handling:
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection if (mediaItemCollection) [musicPlayer setQueueWithItemCollection: mediaItemCollection]; [musicPlayer play]; [self dismissModalViewControllerAnimated: YES]; - (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker [self dismissModalViewControllerAnimated: YES];
Den første metoden kalles når brukeren velger en sang. I denne metoden kontrollerer vi om det er samling av medieobjekter, og hvis det er en samling av medieobjekter, stiller vi musikkpillerens kø til den medieobjektsamlingen og begynner å spille. Vi avviser alltid media-plukkeren. Den andre metoden avviser bare mediespillerkontrolleren.
Klikk på Bygg og kjør for å teste programmet. Du kan velge en sang hvis du trykker på Vis Media Picker knapp. Du ser tittelen, artist, album og kunstverk av gjeldende sang. Hvis du justerer volumet med maskinvareknappene, kan du se at glidebryteren endrer seg.
Takk for at du leser denne veiledningen om tilgang til iPod-biblioteket! Hvis du har spørsmål eller kommentarer til denne opplæringen, legg dem i kommentarfeltet nedenfor!