在iOS 9中,ReplayKit是壹個全新的框架,可謂是遊戲開發者的福音。可以讓玩家更方便的記錄遊戲進度或者數據,分享功能。更強大的是,ReplayKit為用戶(播放器)提供了全功能的交互界面,用戶可以用它來編輯或制作自己的視頻剪輯!
ReplayKit可以產生高清晰度的視頻記錄,而不會有太多的功耗和性能損失。ReplayKit支持A7以上芯片和iOS 9以上操作系統的設備。
需要準備什麽?
本教程要求妳的Xcode版本在7.0以上,OS X在Yosemite(10.10.x)以上。如果妳想在妳的設備上體驗這個簡單的項目,請確保妳的設備能夠滿足ReplayKit的軟硬件要求,當然妳還需要在GitHub上下載項目源代碼。
開始錄音?
ReplayKit框架提供了RPScreenRecorder類和類singleton方法sharedRecorder()供您記錄遊戲。這個實例對象負責檢查設備的錄音功能,包括開始、停止和丟棄記錄,並可以可選地啟動麥克風供玩家錄制真人語音解說!
打開從GitHub下載的初始項目中的GameViewController.swift文件。在文件的頂部,導入ReplayKit框架。
編譯並運行您的應用程序,並嘗試按綠色按鈕。妳會看到壹個類似火焰的粒子效果。如果妳點擊開始記錄,妳會看到這樣的警告,如下圖所示:
請註意,每次開始錄制時,都會出現此警告。然而,壹旦用戶選擇了壹個偏好,系統將在接下來的8分鐘內記住這個選擇。
選擇該選項後,“開始錄制”按鈕會變成紅色的“停止錄制”按鈕。
我們創建壹個UIAlertController,它有兩個動作,壹個是丟棄記錄,另壹個是回顧記錄。如果選擇放棄記錄,請調用discardRecordingWithHandler(_:)。請註意,只有在成功完成記錄後,才能調用此方法。如果在記錄過程中調用它,系統不會拋出任何錯誤,但不會丟棄任何記錄。
選擇回看記錄,我們會呈現previewController視圖,這是RPPreviewController類的壹個實例,從stopercordingwithhandler(_:)方法的回調塊返回給我們,以便回看、編輯或共享記錄。這個previewController視圖控制器實例是唯壹可以訪問ReplayKit生成的視頻文件的實例,它的功能是保存/共享記錄。
最後,別忘了恢復startRecording按鈕再次開始另壹次錄音!
編譯並運行您的應用程序,然後單擊開始記錄。壹旦您按下停止錄制按鈕,您將看到以下彈出窗口:
如果選擇視圖選項,將出現以下視圖控制器:
在這裏,您可以編輯您的視頻,並點擊保存按鈕選擇將其傳輸到您的“照片”。當然,妳也可以點擊左下角的分享按鈕來分享妳錄制的視頻。
需要註意的是,無論是設計原因還是ReplayKit框架的bug,在保存到“照片”時,未經確認就直接保存了。
排除界面元素
您可能已經註意到,頂部和底部的按鈕在應用程序的錄制中是可見的,它們包含在最終的視頻錄制中。RepalyKit在記錄妳的應用時,會無遺漏地記錄應用在UIWindow中渲染的所有視圖,無隱瞞地記錄任何細節。幸運的是,當來電為yes或用戶輸入時,RepalyKit可以在界面中停止錄音。
用戶界面元素從記錄中排除,您需要將它們放在壹個單獨的UIWindow實例中。我們來研究壹下它是如何工作的。在GameViewController類中添加壹個屬性buttonWindow,類型為UIWindow!
新的視圖控制器和以前的唯壹區別是窗口頂部的交互部分。它確保交互控件的正確顯示和用戶交互的正確執行。
再次運行您的應用程序並進行新的記錄,您會發現界面按鈕被隱藏:
大意
在即將結束的時候,使用RepalyKit需要註意壹些關鍵點。
每個應用程序在任何時候只能存儲壹條記錄。壹旦您開始記錄新記錄,如果先前的記錄已經存在,新記錄將自動覆蓋先前的記錄!
及時丟棄不必要的記錄。保證沒有太多不必要的視頻數據占用設備本地存儲空間,壹旦從用戶的行為判斷出壹條記錄沒有價值,就及時丟棄。在本教程中,在用戶不需要記錄的情況下,教程也給出了最好的實現邏輯,就是丟棄。
顯示錄音指示器。如本教程所述,顯示指示器可以提示用戶是否正在錄制視頻,尤其是在同時使用設備的麥克風時,以盡可能改善用戶體驗。
仔細選擇要排除在用戶錄制交互界面之外的元素,將選擇界面的元素放在單獨的窗口中,包括用於選擇的控件或者那些偏離遊戲本身的無關緊要的東西。例如:記錄指示器、虛擬控件或菜單按鈕。
您不能直接訪問最終的視頻文件。只有通過回顧視圖控制器previewViewController,才能使存儲在ReplayKit的記錄中的數據可見。但出於蘋果對用戶隱私的保護,ReplayKit的記錄數據應該是應用程序訪問的。如果要將這些記錄上傳到自己的服務器上,需要為* * *創建壹個擴展視圖控制器,並從previewViewController中呈現出來。
ReplayKit還支持家長控制。即使沒有其他進程在後臺運行,錄音功能是否可用仍由家長控制授權。這意味著您應該確保在錄制開始時檢查該功能是否被允許。
最後,雖然蘋果已經準備好讓遊戲開發者用ReplayKit分享他們的遊戲,但是只要符合Xcode 7+和iOS 9+的要求,妳就可以在任何蘋果應用中使用ReplayKit。我非常支持ReplayKit的優秀框架,也很高興看到更多的開發者可以用它做出更多更好的蘋果應用!