録画機能が追加されます!

先日公開された iOS 11 には、画面の録画機能「 Screen Recording (スクリーンレコーディング)」が標準で搭載されます!

今までは、画面の動画を収録する場合、 mac に lightnig ケーブルで接続して「 QuickTime Player 」を使って録画する方法がありましたが、これからは iPhone / iPad 単体で録画できるようになります!

また、録画状態をプログラムから検知する方法も取り上げます。とても便利な機能なので、しっかり覚えて使っていきましょう!

まずは準備しよう

Screen Recording 行下準備として、まずは録画ボタンを表示させる必要があります。

「設定」>「コントロールセンター」>「コントロールをカスタマイズ」を選択し、「画面収録」の「+」ボタンをタップしてください。「画面収録」が「含める」側に移動しますね!これだけで準備完了です!

それでは、コントロールセンターを表示してみましょう。画面録画ボタンが追加されています。

録画してみよう

では、このボタンを押して、画面を録画してみましょう。録画ボタンがカウントダウンを始めて、録画がスタートします。録画中は、ステータスバーが赤く光ります。

録画を停止する場合は、ステータスバーをタップするか、再度コントロールセンターで録画ボタンをタップします。

収録が終わると、動画ファイルが「写真」アプリに保存されていますので、確認してみましょう。

プログラムで録画状態を確認しよう

さてさて、こんなに簡単に、しかも誰にでも録画ができてしまうとなると「録画機能を使われたら困る!」「録画中かどうかを判定して処理を分けたい」という開発者さんもいるかもしれないですね。

ですので、録画機能の使い方を覚えたら、次はアプリから「録画中かどうか?」を検知してみましょう。

任意のタイミングで録画をチェック

まずは、ボタンを押したタイミングで「録画中かどうか?」を確認する方法です。

@IBAction func tapButton(_ sender: Any) {
    // 録画中かどうかのステータス.
    if UIScreen.main.isCaptured {
        print("録画中です")
    } else {
        print("録画中ではないです")
    }
}

このように UIScreen#isCaptured を利用することで、現在の録画ステータスを確認することができます。

録画の開始・終了をチェック

任意のタイミングではなく、録画が始まったことを検知、もしくは終了したことを検知するには、 NSNotification を利用します。

override func viewDidLoad() {
    super.viewDidLoad()

    // 録画状態の変更を監視.
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(captured(_:)),
        name: NSNotification.Name.UIScreenCapturedDidChange,
        object: nil
    )
}

@objc func captured(_ notification: NSNotification) {
    if UIScreen.main.isCaptured {
        print("録画が始まりました")
    } else {
        print("録画が終わりました")
    }
}

このように NSNotification.Name.UIScreenCapturedDidChange を監視することで、録画の開始と終了を検知することができます。

まとめ

iOS 11 から利用可能になった Screen Recording 機能ですが、デバッグや操作記録にとても便利そうですね!積極的に使っていきたいところです。

また、新たに追加された API を利用することで、録画状態の確認も行うことができます。アプリの要件によっては、録画状態を確認する必要があると思いますので、このあたりを参考に実装してみてください。