Met toegang tot de muziekbibliotheek kunnen uw toepassingen de nummers, audioboeken en podcastcollecties van uw gebruikers opnemen. Deze functionaliteit kan worden gebruikt om het spel te verbeteren door gebruikers hun eigen soundtrack te laten spelen, aangepaste mediaspelertoepassingen te bouwen en meer!
OPMERKING: om deze functionaliteit te testen, hebt u een fysiek iOS-apparaat nodig en moet u lid zijn van het betaalde iOS-ontwikkelaarsprogramma.
Open Xcode en selecteer? Een nieuw Xcode-project maken ?. Selecteer? Op weergave gebaseerde applicatie? en klik op? volgende ?. Voer een naam in voor uw project (ik heb de mijne genoemd? Muziek?), Voer uw bedrijfsidentificatie in, zorg ervoor dat u de iPhone selecteert voor de apparaatfamilie en klik vervolgens op? Volgende ?. Kies een plaats om uw project op te slaan en klik op? Create?.
Selecteer in het navigatiegebied van Xcode 4 de projectnaam (in ons geval? Muziek?). Selecteer vervolgens het huidige doel (? Muziek? Hier opnieuw) en selecteer vervolgens de? Build-fases? tab. Breid het? Link binair met bibliotheken uit? optie en klik vervolgens op de? +? om een nieuw kader toe te voegen. Type? MediaPlayer "in het zoekvak en selecteer de MediaPlayer.framework optie die in de lijst verschijnt. Klik? Toevoegen? om dit kader op te nemen in de koppelingsfase van uw project.
Nu u het mediaspelerkader aan uw project hebt toegevoegd, moet u dat framework importeren in de view-controller die de iPod zal gebruiken
bibliotheek. Ga naar de MusicViewController.h bestand en voeg de volgende regel code onder de UIKit in #importeren
lijn:
#importeren#importeren
Download de broncode en sleep de afbeeldingenkaart naar uw project. Zorg ervoor dat het selectievakje is ingeschakeld Item in de map van de bestemmingsgroep kopiëren (indien nodig) is nagekeken. Deze kaart bevat de afbeeldingen die we in deze app zullen gebruiken.
In de? Muziek? map in de? Project Navigator? klik op MusicViewController.xib.
Sleep een UIImageView vanuit de bibliotheek naar de weergave. Zorg ervoor dat het venster met hulpprogramma's wordt weergegeven en ga naar Size Inspector. Stel zowel de breedte als de hoogte in op 200, de x-coördinaat op 60 en de y-coördinaat op 20. Deze afbeeldingsweergave toont het artwork van de nummers.
Versleep nu een UISlider naar de weergave en rangschik deze met de blauwe hulplijnen naar de onderkant van de weergave. Maak het ook een beetje breder, dus het gebruikt de volledige breedte van het aanzicht tussen de twee blauwe richtlijnen. We zullen deze schuif gebruiken om het volume aan te passen.
Sleep nu 4 UIButtons naar de weergave. Sleep de eerste onder de afbeeldingsweergave en stel de titel ervan in op? Media kiezer weergeven ?. Deze zal precies doen wat de tekst zegt. De andere drie knoppen zijn de bedieningsknoppen. Selecteer de andere drie knoppen en ga naar Kenmerken Inspector. Zet het type op gewoonte en stel de afbeelding van de knoppen in respectievelijk in PreviousButton.png, PlayButton.png en NextButton.png. Rangschik de knoppen zoals hieronder.
Sleep ten slotte drie UILabels naar de weergave. Verwijder de tekst van alle labels en rangschik ze zoals hieronder (ik heb wat tekst toegevoegd, zodat u kunt zien waar de labels zijn. U hoeft deze tekst niet toe te voegen). Deze labels geven informatie over het nummer dat momenteel wordt afgespeeld.
Nu we de interface hebben ontworpen, kunnen we de verbindingen maken. Klik op de middelste knop van de editor om de assistent redacteur .
Klik op de afbeeldingsweergave en CTRL-sleep naar de interface. Een pop-up zal laten zien. Voer de tekst in? ArtworkImageView? voor naam en klik vervolgens op? connect.?
Klik nu op de schuifregelaar en verbind deze op dezelfde manier, maar noem hem? VolumeSlider ?. CTRL-sleep nogmaals vanuit de schuifregelaar naar de interface, maar dit keer onder de accolades. Stel de verbinding in op Actie in plaats van Uitgang. Enter? VolumeChanged? voor de naam en zorg ervoor dat de gebeurtenis Waardewijziging is en klik op? connect?.
Deze 4 knoppen hebben ook acties nodig. Verbind ze op dezelfde manier waarop de schuifregelaar is aangesloten. Noem de acties als volgt:
De afspeelknop heeft ook een stopcontact nodig. Sluit het op dezelfde manier aan waarop we het stopcontact voor de beeldweergave hebben aangesloten, maar noem het? PlayPauseButton?.
Eindelijk moeten we de outlets voor de labels creëren. Sluit ze opnieuw aan op dezelfde manier waarop we de beeldweergave-uitgang hebben aangesloten. Noem het eerste label? TitleLabel ?, het tweede label? ArtistLabel? en het laatste label? albumLabel?.
Nu zou de code voor het bestand MusicViewController.h als volgt moeten luiden:
#importeren#importeren @interface MusicTestViewController: UIViewController IBOutlet UIImageView * artworkImageView; IBOutlet UISlider * volumeSlider; IBOutlet UIButton * playPauseButton; IBOutlet UILabel * titleLabel; IBOutlet UILabel * artistLabel; IBOutlet UILabel * albumLabel; - (IBAction) volumeChanged: (id) afzender; - (IBAction) showMediaPicker: (id) afzender; - (IBAction) previousSong: (id) afzender; - (IBAction) playPause: (id) afzender; - (IBAction) nextSong: (id) afzender; @einde
Bouw de code en voer deze uit om te zorgen dat de app goed werkt. De app geeft alleen de interface weer die we zojuist hebben gemaakt, maar de knoppen werken niet.
Ga naar de MusicViewController.h bestand en wijzig de code om te lezen als volgt:
#importeren#importeren @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, retain) MPMusicPlayerController * musicPlayer; - (IBAction) volumeChanged: (id) afzender; - (IBAction) showMediaPicker: (id) afzender; - (IBAction) previousSong: (id) afzender; - (IBAction) playPause: (id) afzender; - (IBAction) nextSong: (id) afzender; - (void) registerMediaPlayerNotifications; @einde
Zoals je kunt zien hebben we de MPMediaPickerControllerDelegate en creëerde een MPMusicPickerController. We hebben ook de methode toegevoegd registerMediaPlayerNotifications voor het registreren van meldingen van de mediaspeler.
Ga nu naar de MusicViewController.m bestand en synthetiseer de musicPlayer door de volgende code toe te voegen onder de @implementatie :
@synthesize musicPlayer;
We moeten het ook vrijgeven in de dealloc
en viewDidUnload
methode met de volgende code:
[musicPlayer release];
Ga nu naar de viewDidLoad
methode. Maak een commentaar en voeg de onderstaande code toe [super viewDidLoad];
musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
Hier hebben we onze muziekspelercontroller ingesteld op een iPodMusicPlayer. Dit betekent dat onze app de iPod-status deelt en dat als we onze app afsluiten, de muziek blijft spelen. De applicationMusicPlayer is van het andere type. Deze muziekspeler speelt de muziek lokaal in je app. Uw muziekspeler kan een ander item hebben dat nu wordt afgespeeld dan de ingebouwde iPod-app. Wanneer je de app afsluit, stopt de muziek met spelen.
Voeg de volgende code toe aan de viewDidLoad
methode:
[volumeSlider setValue: [musicPlayer-volume]]; if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] forState: UIControlStateNormal]; else [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal];
Eerst stellen we de huidige waarde van de schuifregelaar in op het huidige volume van de muziekspeler. Volume is een waarde tussen 0 en 1. Als het volume 0 is, is er geen geluid en als het volume 1 is, is het volume op zijn maximum. Daarna controleren we of de muziekspeler iets speelt. Als het wordt afgespeeld, stellen we het beeld van de playPauseButton in op de pauseButton-afbeelding en wanneer deze niet wordt afgespeeld, stellen we de afbeelding van de playPauseButton in op de playButton-afbeelding.
Voeg de volgende code toe aan de viewDidLoad
methode:
[zelfregistratieMediaPlayerNotifications];
Deze regel roept de registerMediaPlayerNotifications
methode waarbij we drie waarnemers registreren voor de mediaspeler-meldingen. Voeg de volgende code toe onder de viewDidLoad
methode:
- (void) registerMediaPlayerNotifications NSNotificationCenter * notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver: self selector: @selector (handle_NowPlayingItemChanged :) naam: MPMusicPlayerControllerNowPlayingItemDidChangeNotification-object: musicPlayer]; [notificationCenter addObserver: self selector: @selector (handle_PlaybackStateChanged :) name: MPMusicPlayerControllerPlaybackStateDidChangeNotification-object: musicPlayer]; [notificationCenter addObserver: self selector: @selector (handle_VolumeChanged :) naam: MPMusicPlayerControllerVolumeDidChangeNotification-object: musicPlayer]; [musicPlayer beginGeneratingPlaybackNotifications];
Hier registreren we drie waarnemers voor de mediaspeler-meldingen. De eerste is voor de MPMusicPlayerControllerNowPlayingItemDidChangeNotification
. We zullen dit gebruiken om de huidige media-item-informatie bij te werken. De tweede is voor de MPMusicPlayerControllerPlaybackStateDidChangeNotification
, we gebruiken deze ook om onze gebruikersinterface te updaten. De derde en laatste is voor de MPMusicPlayerControllerVolumeDidChangeNotification
, we zullen deze gebruiken om de huidige waarde van onze schuifregelaar bij te werken.
Telkens wanneer u een waarnemer registreert, moet u deze ook verwijderen in de viewDidUnload
en de dealloc
methoden. Dus voeg de volgende code toe aan beide methoden:
[[NSNotificationCenter defaultCenter] removeObserver: self name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification-object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: self name: MPMusicPlayerControllerPlaybackStateDidChangeNotification-object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: self name: MPMusicPlayerControllerVolumeDidChangeNotification-object: musicPlayer]; [musicPlayer endGeneratingPlaybackNotifications];
Voeg de volgende code toe onder de registerMediaPlayerNotifications
methode:
- (void) handle_NowPlayingItemChanged: (id) notification MPMediaItem * currentItem = [musicPlayer nowPlayingItem]; UIImage * artworkImage = [UIImage imageNamed: @ "noArtworkImage.png"]; MPMediaItemArtwork * artwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork]; if (artwork) artworkImage = [artwork imageWithSize: CGSizeMake (200, 200)]; [artworkImageView setImage: artworkImage]; NSString * titleString = [currentItem valueForProperty: MPMediaItemPropertyTitle]; if (titleString) titleLabel.text = [NSString stringWithFormat: @ "Title:% @", titleString]; else titleLabel.text = @ "Titel: Onbekende titel"; NSString * artistString = [currentItem valueForProperty: MPMediaItemPropertyArtist]; if (artistString) artistLabel.text = [NSString stringWithFormat: @ "Artist:% @", artistString]; else artistLabel.text = @ "Artiest: onbekende artiest"; NSString * albumString = [currentItem valueForProperty: MPMediaItemPropertyAlbumTitle]; if (albumString) albumLabel.text = [NSString stringWithFormat: @ "Album:% @", albumString]; else albumLabel.text = @ "Album: onbekend album";
Deze methode zal reageren op de MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
kennisgeving. Eerst maken we een MPMediaItem en stellen het in op nowPlayingItem. Vervolgens maken we een UIImage met de naam artworkImage. Voor standaard zetten we de afbeelding op de noArtworkImage. Vervolgens maken we een MPMediaItemArtwork-object dat de illustratie van het huidige item opslaat. Als er illustraties zijn, stellen we de artworkafbeelding in op de illustratie. Ten slotte stellen we de afbeelding artworkImageView in op de artworkImage.
Vervolgens maken we een NSString met de titel van het huidige item. Nogmaals, we controleren of het currentItem een titel heeft. Als het een titel heeft, zetten we het tittleLabel op die titel. Als het currentItem geen titel heeft, stellen we de titel in op? Unknown ?. We doen hetzelfde met de artiest en het album.
We hebben hier alleen de eigenschappen artwork, titel, artiest en album gebruikt, maar er zijn nog veel meer eigenschappen, zoals songteksten, beoordelingen en componisten.
Voeg de volgende code toe onder de handle_NowPlayingItemChanged:
methode:
- (void) handle_PlaybackStateChanged: (id) notification MPMusicPlaybackState playbackState = [musicPlayer playbackState]; if (playbackState == MPMusicPlaybackStatePaused) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal]; else if (playbackState == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] forState: UIControlStateNormal]; else if (playbackState == MPMusicPlaybackStateStopped) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] forState: UIControlStateNormal]; [musicPlayer stop];
Deze methode zal reageren op de MPMusicPlayerControllerPlaybackStateDidChangeNotification:
kennisgeving. Hier controleren we de status van de muziekspeler en werken het beeld van de playPauseButton bij. Zoals je ziet, stoppen we de muziekspeler als de staat ervan is MPMusicPlaybackStateStopped. We doen dit om ervoor te zorgen dat de muziekspeler vanaf het begin de wachtrij afspeelt.
Voeg ten slotte de volgende code toe onder de handle_PlaybackStateChanged:
methode:
- (void) handle_VolumeChanged: (id) notification [volumeSlider setValue: [musicPlayer volume]];
Deze methode zal reageren op de MPMusicPlayerControllerVolumeDidChangeNotification:
kennisgeving. Hier werken we de waarde van de volumeregelaars bij naar het volume van de muziekspeler. We doen dit omdat we het volume ook kunnen aanpassen met de hardwareknoppen.
Ga naar de volumeChanged:
actie en wijzig de code als volgt:
- (IBAction) volumeChanged: (id) afzender [musicPlayer setVolume: [volumeSlider value]];
Hier stellen we het volume van de muziekspeler in op de waarde van de schuifregelaar.
Ga nu naar de speel pauze:
actie en wijzig de code als volgt:
- (IBAction) playPause: (id) afzender if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [musicPlayer pause]; else [musicPlayer play];
Eerst controleren we of de muziekspeler aan het spelen is. Als het wordt afgespeeld, pauzeren we de muziekspeler. Als de muziek niet wordt afgespeeld, beginnen we de muziek af te spelen.
Ga nu naar de previousSong:
actie en wijzig de code als volgt:
- (IBAction) previousSong: (id) afzender [musicPlayer skipToPreviousItem];
Hier laten we de muziekspeler naar het vorige item gaan.
Eindelijk, ga naar de volgende liedje:
actie en wijzig de code als volgt:
- (IBAction) nextSong: (id) afzender [musicPlayer skipToNextItem];
Hier laten we de muziekspeler doorgaan naar het volgende item.
Het laatste wat we moeten doen is de media-kiezer tonen en een nummer afspelen als de gebruiker een of meer nummers heeft gekozen. Ga naar de showMediaPicker:
actie en wijzig de code als volgt:
- (IBAction) showMediaPicker: (id) afzender MPMediaPickerController * mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny]; mediaPicker.delegate = zelf; mediaPicker.allowsPickingMultipleItems = YES; mediaPicker.prompt = @ "Selecteer nummers om af te spelen"; [self presentModalViewController: mediaPicker geanimeerd: YES]; [mediaPicker-release];
Eerst maken we een mediapiekcontroller en stellen we de gedelegeerde in op zichzelf. We staan ook toe dat de gebruiker meerdere items kiest. De prompt is de tekst die wordt weergegeven wanneer de media-kiezer wordt weergegeven. Ik heb de prompt ingesteld op? Selecteer nummers om af te spelen ?. Vervolgens tonen we de media-kiezer en geven deze vrij.
Voeg de volgende code toe onder de showMediaPicker
: actie:
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection if (mediaItemCollection) [musicPlayer setQueueWithItemCollection: mediaItemCollection]; [musicPlayer play]; [self dismissModalViewControllerAnimated: YES]; - (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker [self dismissModalViewControllerAnimated: YES];
De eerste methode wordt aangeroepen wanneer de gebruiker een nummer kiest. Bij deze methode controleren we of er media-items worden verzameld en als er een collectie media-items is, stellen we de wachtrij van de muziekspeler in voor die verzameling media-items en beginnen we met spelen. We wijzen de media picker-controller altijd af. De tweede methode negeert alleen de mediaspelercontroller.
Klik op Build and Run om de applicatie te testen. U kunt een nummer kiezen als u op Show Media Picker knop. Je ziet de titel, artiest, album en illustraties van het huidige nummer. Als u het volume aanpast met de hardwareknoppen ziet u de schuifregelaar veranderen.
Bedankt voor het lezen van deze tutorial over toegang tot de iPod-bibliotheek! Als u vragen of opmerkingen over deze zelfstudie hebt, laat ze dan in de opmerkingen hieronder staan!