ReplayKit este un nou cadru care a fost introdus alături de iOS 9. Acesta permite dezvoltatorilor de jocuri să ofere jucătorilor posibilitatea de a înregistra și împărtăși cu ușurință un gameplay. În plus față de înregistrare și partajare, ReplayKit include, de asemenea, o interfață de utilizator pe deplin funcțională pe care jucătorii o poate folosi pentru a-și edita videoclipurile.
Înregistrările produse de ReplayKit sunt de înaltă definiție și sunt create cu o utilizare minimă a puterii și o pierdere de performanță. Funcțiile ReplayKit sunt disponibile pentru toate dispozitivele cu sistem A7, A8 sau A9 pe sistem (fiecare dispozitiv care acceptă metale), care rulează iOS 9 sau o versiune ulterioară.
Acest tutorial cere să executați Xcode 7+ pe OS X Yosemite sau mai târziu. Dacă doriți să testați proba de proiect pe un dispozitiv, atunci aveți nevoie de un dispozitiv care suportă ReplayKit. De asemenea, va trebui să descărcați proiectul Starter de la GitHub.
Înregistrarea gameplay-ului cu ReplayKit începe cu RPScreenRecorder
clasa și sharedRecorder ()
disponibilă aplicației dvs. Acest recorder este responsabil pentru verificarea capacității dispozitivului de a înregistra, de a începe, de a opri și de a elimina înregistrările, precum și de a permite opțional microfonul dispozitivului să permită jucătorilor să adauge propriul comentariu vocal live asupra jocului audio.
Deschideți proiectul inițial pe care l-ați descărcat de la GitHub și mergeți la GameViewController.swift. În partea de sus a acestui fișier, adăugați o declarație de import pentru cadrul ReplayKit.
import ReplayKit
Apoi, implementați începe înregistrarea(_:)
metodă în GameViewController
clasă. Această metodă este invocată atunci când utilizatorul interceptează Începe înregistrarea buton.
func startRecording (expeditor: UIButton) if RPScreenRecorder.sharedRecorder () disponibil RPScreenRecorder.sharedRecorder () startRecordingWithMicrophoneEnabled (true, handler: (eroare: NSError? a început sender.removeTarget (auto, acțiune: "startRecording:", forControlEvents: .TouchUpInside) sender.addTarget (auto, acțiune: "stopRecording:", forControlEvents: .TouchUpInside) sender.setTitle ("Stop Recording", forState:. ) sender.setTitleColor (UIColor.redColor (), forState: .Normal) altceva // Eroare de manevră) altceva // Interfața de afișare pentru înregistrare fiind indisponibilă
Să trecem prin această metodă pas cu pas. Accesăm RPScreenRecorder
instanță disponibilă pentru aplicația noastră prin sharedRecorder ()
și verificăm dacă înregistrarea este disponibilă pentru dispozitiv.
Dacă înregistrarea este disponibilă, începem o înregistrare sunând la startRecordingWithMicrophone (_: handler :)
pe obiectul înregistratorului partajat. Parametrii pentru această metodă sunt booleani, indicând dacă doriți sau nu să utilizați microfonul dispozitivului și un handler de completare. Managerul de terminare are acces la un obiect de eroare opțional, care vă este returnat de către cadrul ReplayKit dacă ceva nu merge bine. Dacă cadrul nu a aruncat o eroare, ajustăm ținta și aspectul butonului, astfel încât utilizatorul să poată opri înregistrarea când este gata.
Construiți și executați aplicația și încercați aplicația atingând butonul verde. Veți vedea că un sistem de particule din scena generează particule în timp ce butonul verde este împins. Dacă atingeți Începe înregistrarea, ar trebui să vedeți următoarea alertă:
Rețineți că această alertă va apărea de fiecare dată când începeți să înregistrați în aplicația dvs. Odată ce un utilizator a selectat una dintre aceste opțiuni, preferința lor va fi reținută și niciuna dintre aceste alerte nu va apărea pentru următoarele opt minute.
După ce ați selectat una dintre aceste opțiuni din alertă, Începe înregistrarea butonul trebuie să devină roșu Opriți înregistrarea buton.
Acum că aplicația noastră este capabilă să inițieze înregistrări ReplayKit, este timpul să învățăm cum să ne ocupăm de aceste înregistrări după terminare. Implementați stopRecording (_ :)
metodă în GameViewController
clasă.
funcția stopRecorder (expeditor: UIButton) RPScreenRecorder.sharedRecorder () stopRecordingWithHandler (previewController: RPPreviewViewController ?, eroare: NSError?) -> Void in if previewController! = nil let alertController = UIAlertController "Vrei să renunți sau să vizualizezi înregistrarea de gameplay?", PreferatStyle: .Alert) lasă discardAction = UIAlertAction (titlu: "Discard", stil: .Default) (acțiune: UIAlertAction) în RPScreenRecorder.sharedRecorder () -> Void în // Execuția o dată ce înregistrarea a fost eliminată cu succes a permite viewAction = UIAlertAction (titlu: "View", stil:. (previewController !, animat: true, completare: nil)) alertController.addAction (discardAction) alertController.addAction (viewAction) auto.presentViewController (alertController, animat: true, completare: nil) sender.removeTarget : ", pentruC ("Începeți înregistrarea", forState: .Normal) sender.setTitleColor (UIColor.blueColor (), forState:). Normal) altceva // Eroare de manevră
Încă o dată, să trecem prin această metodă pas cu pas. Noi numim stopRecordingWithHandler (_ :)
pe obiectul înregistratorului partajat. În acest program de completare, verificăm dacă înregistrarea a terminat cu succes verificând dacă previewController
există.
Creăm a UIAlertController
cu două acțiuni, una pentru a renunța la înregistrare și una pentru a vedea înregistrarea. Dacă utilizatorul alege să renunțe la înregistrare, vom invoca discardRecordingWithHandler (_ :)
. Rețineți că această metodă poate fi apelată cu succes numai după terminarea unei înregistrări. Dacă apelați această metodă în timp ce o înregistrare este în curs de desfășurare, nu este aruncată nicio eroare, dar nici datele de înregistrare nu sunt aruncate.
Dacă utilizatorul alege să vizualizeze înregistrarea, vă prezentăm previewController
, o instanță a RPPreviewController
clasa, înmânată de noi stopRecordingWithHandler (_ :)
unde utilizatorul poate previzualiza, edita și împărtăși înregistrarea. Controllerul de previzualizare este singurul obiect care are acces la fișierul video generat de ReplayKit și este responsabil de salvarea / partajarea acelei înregistrări.
În cele din urmă, readucem butonul înapoi la starea inițială, astfel încât să se poată face o altă înregistrare dacă utilizatorul dorește.
Construiți și rulați din nou aplicația și începeți o înregistrare. Odată ce ați apăsat apoi Opriți înregistrarea butonul trebuie să vadă următoarea alertă:
Dacă apăsați apoi pe Vedere , este prezentat următorul controler de vizualizare.
Din acest ecran, puteți să editați videoclipul și să îl salvați în rola aparatului foto, apăsând pe Salvați buton. Puteți, de asemenea, să o distribuiți apăsând butonul din colțul din stânga jos.
Rețineți că, la momentul redactării acestui tutorial, fie prin design, fie datorită unei erori în cadrul ReplayKit, nu există confirmare după ce o înregistrare a fost salvată pe rola aparatului foto.
Este posibil să fi observat că butoanele de sus și de jos sunt, de asemenea, vizibile în înregistrările făcute de aplicație. Acestea sunt incluse în filmul final. Atunci când ReplayKit înregistrează aplicația dvs., înregistrează totul în principalul aplicației dvs. UIWindow
instanță. Din fericire, ReplayKit exclude automat orice notificări de intrare și intrarea utilizatorilor de la înregistrare.
Pentru a exclude elementele interfeței utilizator din înregistrare, trebuie să le plasați în propriile lor separate UIWindow
instanță. Să vedem cum funcționează. Adăugați o proprietate, buttonWindow
de tip UIWindow!
, la GameViewController
clasă.
buton varWindow: UIWindow!
Apoi, înlocuiți implementarea actuală a addButtons (_ :)
metodă a GameViewController
clasa cu următoarea implementare:
func addButtons (butoane: [UIButton]) self.buttonWindow = UIWindow (cadru: self.view.frame) self.buttonWindow.rootViewController = HiddenStatusBarViewController () pentru butonul în butoane self.buttonWindow.rootViewController? .view.addSubview ) self.buttonWindow.makeKeyAndVisible ()
În addButtons (_ :)
, noi creăm un nou UIWindow
obiect, adăugați butoanele și faceți-o vizibilă. Rețineți că HiddenStatusBarViewController
clasa este una personalizată pe care am adăugat-o la proiectul de pornire. Se asigură că bara de stare rămâne ascunsă în noua fereastră.
În cele din urmă, înlocuiți punerea în aplicare a directivei stopRecording (: _)
cu următoarea implementare:
funcția stopRecorder (expeditor: UIButton) RPScreenRecorder.sharedRecorder () stopRecordingWithHandler (previewController: RPPreviewViewController ?, eroare: NSError?) -> Void in if previewController! = nil let alertController = UIAlertController "Vrei să renunți sau să vizualizezi înregistrarea de gameplay?", PreferatStyle: .Alert) lasă discardAction = UIAlertAction (titlu: "Discard", stil: .Default) (acțiune: UIAlertAction) în RPScreenRecorder.sharedRecorder () -> Void în // Execuția o dată ce înregistrarea a fost eliminată cu succes letAction = UIAlertAction (titlu: "View", stil:. .rootViewController? .presentViewController (previewController !, animat: true, completare: nil)) alertController.addAction (discardAction) alertController.addAction (viewAction) print (self.buttonWindow.rootViewController) self.buttonWindow.rootViewController? .presentViewControl ler (alertController, animat: adevărat, completare: nil) sender.removeTarget (auto, acțiune: "stopRecording:", forControlEvents: .TouchUpInside) sender.addTarget (auto, acțiune: "startRecording:", forControlEvents:. setTitle ("Începeți înregistrarea", forState: .Normal) sender.setTitleColor (UIColor.blueColor (), forState: .Normal) altceva // Eroare de manipulare
Singura diferență este aceea că facem controlerul de vizualizare în fereastra nouă, cea mai de sus să se ocupe de toate prezentările. Acest lucru asigură că totul este afișat corect și că interfața cu utilizatorul poate fi interacționată.
Rulați aplicația încă o dată și faceți o nouă înregistrare. Veți vedea că butoanele nu mai sunt vizibile în videoclip:
Deși nu sunt utilizate în acest tutorial, există două protocoale și un total de patru metode asociate cu ReplayKit. Să aruncăm o privire asupra modului în care ar trebui să le folosiți.
RPScreenRecorderDelegate
protocol definește următoarele metode:
screenRecorder (_: didStopRecordingWithError: previewViewController :)
: Această metodă se numește ori de câte ori apare o eroare în timpul înregistrării. Dacă ReplayKit se poate recupera din această eroare și vă termină înregistrarea, vă va fi dat un controler de vizualizare a previzualizării, pe care îl puteți prezenta utilizatorului.screenRecorderDidChangeAvailability (_ :)
: Această metodă se numește ori de câte ori o înregistrare devine disponibilă sau indisponibilă din cauza unei alte acțiuni. Acest lucru se poate întâmpla, de exemplu, când vă conectați sau vă deconectați de la AirPlay. RPPreviewViewControllerDelegate
protocol definește următoarele metode:
previewViewControllerDidFinish (_ :)
este apelat de îndată ce utilizatorul respinge RPPreviewViewController
instanță.previewViewController (_: didFinishWithActivityTypes :)
se numește în același timp cu previewViewControllerDidFinish (_ :)
, dar oferă o extra UIActivity
parametru.Rețineți că, dacă implementați oricare dintre RPPreviewViewControllerDelegate
metode, atunci tu răspundeți de respingerea controlerului de vizualizare a previzualizării la momentul potrivit.
Pentru a termina, îți voi spune câteva lucruri-cheie pe care să le ții minte când lucrezi cu ReplayKit.
RPPreviewViewController
. Din motive de confidențialitate, înregistrările ReplayKit nu sunt niciodată accesibile direct de aplicația dvs. Dacă doriți să încărcați înregistrarea jocului pe propriile servere, de exemplu, va trebui să creați o extensie de partajare care să apară în foaia de distribuire prezentată de controlerul de vizualizare a previzualizării.Acum ar trebui să vă simțiți confortabil folosind noul cadru ReplayKit pentru a face înregistrări ale ecranului aplicației dvs., care pot fi editate și distribuite de utilizatori. În ansamblu, ReplayKit este un cadru foarte compact dar puternic, care permite dezvoltatorilor să creeze cu ușurință înregistrări în cadrul aplicațiilor lor care sunt împărtășite de utilizatorii lor.
Ca întotdeauna, asigurați-vă că lăsați comentarii sau comentarii în comentariile de mai jos.