Cu accesul bibliotecii muzicale, aplicațiile dvs. pot include melodiile, cărțile audio și colecțiile de podcast ale utilizatorilor dvs. Această funcționalitate poate fi utilizată pentru a îmbunătăți modul de joc, permițând utilizatorilor să-și redea propria coloană sonoră, să creeze aplicații media player personalizate și multe altele!
NOTĂ: Pentru a testa această funcționalitate, veți avea nevoie de un dispozitiv fizic iOS și va trebui să fie membru al programului dezvoltator plătit iOS.
Deschideți Xcode și selectați? Creați un nou proiect Xcode ?. Selectați aplicația bazată pe vizualizare? și faceți clic pe "Next" ?. Introduceți un nume pentru proiectul dvs. (am sunat pe mine? Music?), Introduceți identificatorul companiei dvs., asigurați-vă că selectați iPhone pentru familia de dispozitive, apoi faceți clic pe? Next ?. Alegeți un loc pentru a salva proiectul dvs. și faceți clic pe "creați"?.
În zona de navigare a Xcode 4, selectați numele proiectului (în cazul nostru, "Muzică?"). Apoi, selectați ținta curentă (? Muzică? Aici din nou), apoi selectați? Faze de construcție? tab. Extindeți linia binară cu biblioteci? , apoi faceți clic pe butonul? +? pentru a adăuga un cadru nou. Introduceți "MediaPlayer" în caseta de căutare și selectați MediaPlayer.framework care apare în listă. Faceți clic pe? Adăugați? pentru a include acest cadru în faza de legătură a proiectului dvs..
Acum că ați adăugat cadrul media player în proiectul dvs., trebuie să importați acel cadru în controlerul de vizualizare care va folosi iPod-ul
bibliotecă. Mergeți la MusicViewController.h și introduceți următoarea linie de cod sub UIKit #import
linia:
#import#import
Descărcați codul sursă și trageți harta imaginilor în proiect. Asigurați-vă că caseta de selectare prin Copiați elementul în dosarul grupului de destinație (dacă este necesar) este bifat. Această hartă conține imaginile pe care le vom folosi în această aplicație.
În "Muzică"? folder în "Project Navigator"? faceți clic pe MusicViewController.xib.
Glisați un UIImageView din bibliotecă în vizualizare. Asigurați-vă că este afișată fereastra utilitare și mergeți la Inspector de mărime. Setați atât lățimea și înălțimea la 200, cât și coordonatele x la 60 și coordonatele y la 20. Această imagine va afișa operele de artă ale cântecelor.
Acum glisați un vizualizator UIS în vedere și aranjați-l cu linii de ghidare albastre în partea inferioară a vederii. De asemenea, faceți-o puțin mai largă, astfel încât să utilizeze întreaga lățime a vederii între cele două linii directoare albastre. Vom folosi acest cursor pentru a regla volumul.
Acum trageți 4 UIButtons în vizualizare. Trageți primul sub imaginea de vizualizare și setați titlul la "Afișați selectorul media". Acesta va face exact ceea ce spune textul. Celelalte trei butoane vor fi butoanele de control. Selectați celelalte trei butoane și mergeți la Atribuții Inspector. Setați tipul la Personalizat și setați imaginea respectivelor butoane PreviousButton.png, PlayButton.png și NextButton.png. Aranjați butoanele de mai jos.
În cele din urmă, trageți trei vizualizări UILabels. Ștergeți textul tuturor etichetelor și le aranjați ca mai jos (am adăugat un text, astfel încât să puteți vedea unde sunt etichetele. Nu va trebui să adăugați acest text). Aceste etichete vor afișa câteva informații despre cântecul curent.
Acum că am proiectat interfața, putem face conexiunile. Faceți clic pe butonul din mijloc al editorului pentru a afișa editor asistent .
Faceți clic pe vizualizarea imaginii și trageți de CTRL la interfață. Se va afișa un pop-up. Introduceți textul artworkImageView? pentru nume și apoi faceți clic pe "conectare".?
Acum, faceți clic pe cursor și conectați-l în același mod, dar nume-l? VolumeSlider ?. CTRL-trageți din nou de la cursor la interfață, dar de această dată sub acoladele curbate. Setați conexiunea la acțiune în loc de Outlet. Introduceți? VolumeChanged? pentru numele și asigurați-vă că evenimentul este Changed Value și faceți clic pe "connect"?.
Aceste 4 butoane necesită și acțiuni. Conectați-le în același mod în care a fost conectată acțiunea cursorului. Denumiți acțiunile după cum urmează:
Butonul de redare necesită și o priză. Conectați-l la fel cum am conectat priza pentru vizualizarea imaginilor, dar numește-l? PlayPauseButton?.
În sfârșit, trebuie să creăm punctele de vânzare pentru etichete. Conectați-le din nou în același mod în care conectați priza de vizualizare a imaginilor. Denumiți prima etichetă? TitleLabel ?, a doua etichetă? ArtistLabel? și ultima etichetă??.
Acum, codul pentru fișierul MusicViewController.h ar trebui să citească după cum urmează:
#import#import @ interfață MusicTestViewController: UIViewController IBOutlet UIImageView * artworkImageView; IBOutlet UISlider * volumeSlider; IBOutlet UIButton * playPauseButton; IBOutlet UILabel * titleLabel; IBOutlet UILabel * artistLabel; IBOutlet UILabel * albumLabel; - (IBAction) volumChanged: (id) expeditor; - (IBAction) showMediaPicker: (id) expeditor; - (IBAction) anteriorSong: (id) expeditor; - (IBAction) playPause: (id) expeditor; - (IBAction) nextSong: (id) expeditor; @Sfârșit
Construiți și executați codul pentru a vă asigura că aplicația rulează bine. Aplicația arată doar interfața pe care tocmai am creat-o, dar butoanele nu vor funcționa.
Mergeți la MusicViewController.h modificați codul și citiți după cum urmează:
#import#import @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, reține) MPMusicPlayerController * musicPlayer; - (IBAction) volumeChanged: (id) expeditor; - (IBAction) showMediaPicker: (id) expeditor; - (IBAction) anteriorSong: (id) expeditor; - (IBAction) playPause: (id) expeditor; - (IBAction) nextSong: (id) expeditor; - (void) registerMediaPlayerNotificări; @Sfârșit
După cum vedeți, am adăugat MPMediaPickerControllerDelegate și a creat un MPMusicPickerController. Am adăugat, de asemenea, metoda registerMediaPlayerNotifications pentru înregistrarea notificărilor de la playerul media.
Acum du-te la MusicViewController.m fișier și sintetizați musicplayerul adăugând următorul cod sub @implementation :
@synthesize musicPlayer;
Trebuie, de asemenea, să o eliberăm în dealloc
și viewDidUnload
cu următorul cod:
[release of music player];
Acum du-te la viewDidLoad
metodă. Descărcați-l și adăugați codul de mai jos [super viewDidLoad];
musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
Aici am setat controlerul nostru de muzică la un iPodMusicPlayer. Aceasta înseamnă că aplicația noastră împărtășește starea iPod-ului și dacă renunțăm la aplicația noastră, muzica va continua să fie redată. ApplicationMusicPlayer este celălalt tip. Acest music player reda muzica la nivel local în cadrul aplicației. Playerul dvs. muzical poate avea un alt element de redare acum decât aplicația iPod încorporată. Când închideți aplicația, muzica se oprește din redare.
Adăugați următorul cod la viewDidLoad
metodă:
[volumeSlider setValue: [volum de muzicăPlayer]]; dacă ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] pentruState: UIControlStateNormal]; altceva [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] pentruState: UIControlStateNormal];
Mai întâi, setăm valoarea curentă a cursorului la volumul curent al playerului muzical. Volumul este o valoare cuprinsă între 0 și 1. Dacă volumul este 0, nu există sunet și când volumul este 1, volumul este la maxim. După asta, verificăm că muzica rulează ceva. Dacă se joacă, setăm imaginea butonului playPauseButton pe imaginea pauseButton și când nu se redă, setăm imaginea butonului playPauseButton la imaginea playButton.
Adăugați următorul cod la viewDidLoad
metodă:
[autoînregistrareMediaPlayerNotificări];
Această linie va apela registerMediaPlayerNotifications
unde vom înregistra trei observatori pentru notificările media player. Adăugați următorul cod sub viewDidLoad
metodă:
- (void) registerMediaPlayerNotificări NSNotificationCenter * notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver: selector auto: @selector (handle_NowPlayingItemChanged :) nume: MPMusicPlayerControllerNowPlayingItemDidChangeNotification obiect: musicPlayer]; [notificationCenter addObserver: selector auto: @selector (handle_PlaybackStateChanged :) nume: MPMusicPlayerControllerPlaybackStateDidChangeNotification obiect: musicPlayer]; [notificationCenter addObserver: selector auto: @selector (handle_VolumeChanged :) nume: MPMusicPlayerControllerVolumeDidChangeNotification object: musicPlayer]; [musicPlayer beginGeneratingPlaybackNotifications];
Aici înregistrăm trei observatori pentru notificările playerului media. Prima este pentru MPMusicPlayerControllerNowPlayingItemDidChangeNotification
. Vom folosi acest lucru pentru a actualiza informațiile despre elementul media curent. Al doilea este pentru MPMusicPlayerControllerPlaybackStateDidChangeNotification
, îl folosim și pe acesta pentru actualizarea interfeței noastre. Al treilea și ultimul este pentru MPMusicPlayerControllerVolumeDidChangeNotification
, vom folosi aceasta pentru a actualiza valoarea curentă a cursorului nostru.
De fiecare dată când înregistrați un observator, trebuie să fiți sigur că îl eliminați în viewDidUnload
si dealloc
metode. Deci, adăugați următorul cod la ambele metode:
[[NSNotificationCenter defaultCenter] removeObserver: nume personal: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: nume personal: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: musicPlayer]; [[NSNotificationCenter defaultCenter] removeObserver: nume personal: MPMusicPlayerControllerVolumeDidChangeNotification object: musicPlayer]; [musicPlayer endGeneratingPlaybackNotifications];
Adăugați următorul cod sub registerMediaPlayerNotifications
metodă:
- (void) handle_NowPlayingItemChanged: (id) notificare MPMediaItem * currentItem = [musicPlayer nowPlayingItem]; UIImage * artworkImage = [UIImage imageNamed: @ "noArtworkImage.png"]; MPMediaItemArtwork * opera de arta = [actualItem valueForProperty: MPMediaItemPropertyArtwork]; dacă (opera de artă) artworkImage = [lucrare imagineWithSize: CGSizeMake (200, 200)]; [artworkImageView setImage: artworkImage]; NSString * titleString = [valoarea actuală pentruFerProperty: MPMediaItemPropertyTitle]; if (titleString) titleLabel.text = [NSString șirWithFormat: @ "Titlu:% @", titleString]; altceva titleLabel.text = @ "Title: Titlu necunoscut"; NSString * artistString = [actualItem valueForProperty: MPMediaItemPropertyArtist]; dacă (artistString) artistLabel.text = [NSString șirWithFormat: @ "Artist:% @", artistString]; altceva artistLabel.text = @ "Artist: Artist necunoscut"; NSString * albumString = [actualItem valueForProperty: MPMediaItemPropertyAlbumTitle]; dacă (albumString) albumLabel.text = [NSString stringWithFormat: @ "Album:% @", albumString]; altceva albumLabel.text = @ "Album: Album necunoscut";
Această metodă va răspunde la MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
notificare. Mai intai creem un MPMediaItem si il punem pe acumPlayingItem. Apoi vom crea un UIImage numit artworkImage. În mod prestabilit, setăm imaginea la noArtworkImage. Apoi vom crea un obiect MPMediaItemArtwork care stochează opera de artă a elementului curent. Dacă există opere de artă, am setat artworkImage la opera de artă. În cele din urmă, am setat imaginea artworkImageView la artworkImage.
Apoi vom crea un NSString care stochează titlul currentItem. Din nou, verificăm dacă currentItem are un titlu. Dacă are un titlu, setăm titlul de titlu la acel titlu. Dacă currentItem nu are un titlu, am setat titlul la? Necunoscut ?. Facem același lucru cu artistul și albumul.
Am folosit aici numai lucrările de artă, titlul, artistul și proprietățile albumului, dar există și mai multe proprietăți, cum ar fi versurile, evaluarea și compozitorul.
Adăugați următorul cod sub handle_NowPlayingItemChanged:
metodă:
- (void) handle_PlaybackStateChanged: (id) notificare MPMusicPlaybackState playbackState = [redare muzicăPlayerState]; dacă (playbackState == MPMusicPlaybackStatePaused) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] pentruState: UIControlStateNormal]; altfel dacă (playbackState == MPMusicPlaybackStatePlaying) [playPauseButton setImage: [UIImage imageNamed: @ "pauseButton.png"] pentruState: UIControlStateNormal]; altfel dacă (playbackState == MPMusicPlaybackStateStopped) [playPauseButton setImage: [UIImage imageNamed: @ "playButton.png"] pentruState: UIControlStateNormal]; [stop musicplayer];
Această metodă va răspunde la MPMusicPlayerControllerPlaybackStateDidChangeNotification:
notificare. Aici verificăm starea muzicii și actualizăm imaginea butonului playPauseButton. După cum vedeți, oprim player-ul muzical dacă starea lui este MPMusicPlaybackStateStopped. Facem acest lucru pentru a ne asigura că playerul muzical va juca coada de la începutul jocului.
În sfârșit, adăugați codul de mai jos handle_PlaybackStateChanged:
metodă:
- (void) handle_VolumeChanged: (id) notificare [volumeSlider setValue: [volum de muzicăPlayer]];
Această metodă va răspunde la MPMusicPlayerControllerVolumeDidChangeNotification:
notificare. Aici actualizăm valoarea glisoarelor de volum la volumul playerului muzical. Facem acest lucru pentru că putem regla volumul și cu butoanele hardware.
Mergeți la volumeChanged:
acțiune și modificați codul după cum urmează:
- (IBAction) volumChanged: (id) expeditor [musicPlayer setVolume: [valueSlider value]];
Aici setăm volumul playerului muzical la valoarea cursorului.
Acum du-te la playPause:
acțiune și modificați codul după cum urmează:
- (IBAction) playPause: (id) expeditor if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) [pauză musicPlayer]; altceva [musicPlayer play];
Mai întâi verificăm dacă redarea muzicii este redată. Dacă se joacă, vom întrerupe playerul muzical. Dacă muzica nu se redă, începem să jucăm muzica.
Acum du-te la previousSong:
acțiune și modificați codul după cum urmează:
- (IBAction) precedentSong: (id) expeditor [musicPlayer skipToPreviousItem];
Aici lăsăm muzikatul să treacă la elementul anterior.
În sfârșit, du-te la Următorul cântec:
acțiune și modificați codul după cum urmează:
- (IBAction) nextSong: (id) expeditor [musicPlayer skipToNextItem];
Aici lăsăm muzicianului să treacă la următorul element.
Ultimul lucru pe care trebuie să-l facem este să afișăm selectorul media și să redați o melodie dacă utilizatorul a ales una sau mai multe melodii. Mergeți la showMediaPicker:
acțiune și modificați codul după cum urmează:
- (IBAction) showMediaPicker: (id) expeditorul MPMediaPickerController * mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny]; mediaPicker.delegate = auto; mediaPicker.allowsPickingMultipleItems = DA; mediaPicker.prompt = @ "Selectați melodiile pe care doriți să le redați"; [auto prezentModalViewController: mediaPicker animat: DA]; [release mediaPicker];
În primul rând, creăm un controler de selecție a mass-media și îi stabilim pe delegat pe sine. De asemenea, permitem utilizatorului să aleagă mai multe elemente. Promptul este textul care va fi afișat când se afișează selectorul media. Am setat promptul pentru a selecta melodii pentru a reda ?. Apoi, afișăm selectorul de presă și îl eliberăm.
Adăugați următorul cod sub showMediaPicker
: acțiune:
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection if (mediaItemCollection) [musicPlayer setQueueWithItemCollection: mediaItemCollection]; [play musicplayer]; [auto respingeModalViewControllerAnimated: YES]; - (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker [self dismissModalViewControllerAnimated: YES];
Prima metodă este apelată atunci când utilizatorul alege o melodie. În această metodă verificăm dacă există colecție de elemente media și dacă există o colecție de elemente media, setăm coada de redare a muzicii la colecția de elemente media și începem redarea. Întotdeauna respingem controlerul de selectare a materialelor media. A doua metodă elimină doar controlerul media player.
Faceți clic pe Construiți și executați pentru a testa aplicația. Puteți selecta o melodie dacă apăsați pe Afișați selectorul de materiale buton. Veți vedea titlul, artistul, albumul și opera de artă a melodiei curente. Dacă reglați volumul cu ajutorul butoanelor hardware, puteți vedea cursorul modificat.
Vă mulțumim că ați citit acest tutorial despre accesul la bibliotecile iPod! Dacă aveți întrebări sau comentarii cu privire la acest tutorial, lăsați-le în secțiunea de comentarii de mai jos!