MILLEN BOX

音楽好きの組み込みソフトエンジニアによるプログラミング(主にiOSアプリ開発)の勉強の記録

アニメーションしているViewを手軽に録画してムービーとして保存出来るクラスRecViewAnimationを作成・公開しました

お疲れ様です。

タイトルの通りアニメーションしているViewを録画してムービーとして保存出来るクラス、RecViewAnimationを作成しました。

以下にて公開しております。

▶︎GitHub - anthrgrnwrld/tryRecordingViewAnimation

「アニメーションしているView」ってのは、アニメーションしているViewそのものではなくて、そうゆうViewを内包している親Viewのことです。そいつに映ってるものを録画出来るというわけ。

前回、前々々回の更新はこいつの作成の中で調べた内容なんですよ。

anthrgrnwrld.hatenablog.com

anthrgrnwrld.hatenablog.com

作成した経緯

自作アプリでスクリーンに映っているアニメーションを録画する機能があります。
録画方法はAppleが標準で提供してくれているReplayKitを使用しているのですが、iOS11になってから、極端にその録画に失敗するようになってしましました。
何とか使えるようにならないか検討したのですがどうにもならず、それなら自分で録画用クラスを作成してしまおう!となった訳です。

使用方法

使い方はとてもシンプルにしたつもりです。
このプロジェクト内にある"RecordingViewAnimation.swift”を使用したいプロジェクトにまず放り込みます。 そして使いたいところで以下のような感じでレコーダーを作成してあげます。
let recorder = RecViewAnimation.shared

録画開始したい時には
recorder.startRecording(view: [対象のView], fpsSetting: [フレームレート(1秒間に何コマ表示させるか)]
をコールします。
そして録画停止したい時には
recorder.stopRecording()
をコールします。
このstartRecordingのコールで写真ライブラリへの保存まで行います。
(今後オプションでライブラリへの保存はせず、ファイルパスを渡すようなUpdateもアリかもしれません。)

録画保存の完了を通知して欲しい場合もあるかと思います。
その場合にはrecViewDidFinishedToSaveDelegateを使用して下さい。
その際にはUIViewControllerへのRecViewAnimationDelegateの追加、そしてrecorder.delegate = self の記載を忘れないで下さい。

因みにRecViewAnimationはSingletonクラスなので、どこでRecViewAnimation.shared作っても内容は保持されてますので安心です。
(もちろん停止したら消去するようにしてます。)

また、途中でViewのサイズが変更されてしまった際(画面がRotateしちゃった時とかね)、強制的に録画をStopする仕様にしてます。
このようなケースで録画終了してしまった場合にはDelegateメソッド recViewDidFinishedWithoutCallToStop で通知します。

あ〜最後に、このクラスはPhotoライブラリーへファイルを追加する為、Info.plistにPrivacy - Photo Library Additions Usage Descriptionの記載も必要になります。気をつけて!

以上になります。

そんなに多機能ではありませんが、使ってもらえると嬉しいです。

因みに...

きっかけとなったアプリはiOS11のアップデートによって現象が発生しなくなりました。。。
なんだかな〜。

他で使えるアプリを考えているところです。