【iOS】DockKit 入門
DockKitはDockKitに対応しているiPhoneスタンドアクセサリ (以降DockKitスタンドと記載します) と、iOSのカメラAPIを使用したアプリを連携させることができるフレームワークです。
DockKitを使用することで、iOSのカメラAPIを使用したアプリ側でDockKitスタンドをコントロールすることができるようになります。
本記事では、belkinから発売されたAuto-Tracking Stand Pro with DockKitを使用して、DockKitスタンドをコントロールする方法について説明します。
前準備
Auto-Tracking Stand Pro with DockKitの場合、台座部分にiPhoneを近づけるとペアリングが開始します。
iPhoneとDockKitスタンドをペアリングします。
被写体をトラッキング
まずは、DockKitスタンドを動かして被写体を追跡してみましょう。
被写体を追跡させるための特殊な実装は不要です。iOSのカメラAPIを使用してビデオ撮影機能を実装し、AVCaptureSession
のstartRunning()
を実行するだけで、被写体がフレーム内に収まるようにDockKitスタンドを動かすことができます。
ビデオ撮影機能の実装方法については こちらの記事 でまとめていますので必要に応じてご参照ください。
DockKitには、DockKitスタンドの動きをカスタマイズするためのAPIが用意されています。以降では、DockKitに用意されているAPIを使用して、DockKitスタンドの動きをカスタマイズする方法について説明します。
DockAccessoryオブジェクトを取得
DockKitフレームワークには、DockKitスタンドを表すDockAccessory
が用意されています。DockKitスタンドの動きをカスタマイズするためには、DockAccessory
オブジェクトに対して設定を行っていきます。
DockAccessoryManager.shared.accessoryStateChanges
で、iPhoneと接続しているDockKitスタンドの状態を取得することができます。状態は.docked
と.undocked
の2種類あり、状態が.docked
になっているDockAccessory
オブジェクトを取得します。
DockKitスタンドのシステムトラッキングをオフにする
DockKitスタンドの動きをカスタマイズするためには、システムトラッキングをオフにする必要があります。DockAccessory
のsetSystemTrackingEnabled(_:)
で、システムトラッキングのオンオフを設定することができます。
被写体の表示位置を変更
フレーミングを指定
デフォルトの設定では、被写体はフレーム内中央揃えで表示されます。
被写体を左揃え、右揃えのような特定の位置に変更する時は、DockAccessory
のsetFramingMode(_:)
を使用します。引数にはDockAccessory.FramingMode
で用意されている.automatic
、 .left
、.center
、.right
のいずれかを指定します。
被写体の表示位置 | case |
---|---|
自動調整 | .automatic |
左揃え | .left |
中央揃え | .center |
右揃え | .right |
- 左揃え
- 右揃え
領域を指定
DockAccessory
のsetRegionOfInterest(_:)
で被写体の表示領域を数値で指定することもできます。座標はiPhoneのディスプレイ左上隅が起点となります。 表示領域は正規化された座標で定義します。
DockKitスタンドのモーターをコントロール
DockKitスタンドのモーターをコントロールすることができます。DockKitスタンドは XとYの2つの回転軸で動作します。
DockAccessory
のsetAngularVelocity(_:)
で、DockKitスタンドのモーターをコントロールします。setAngularVelocity(_:)
の引数には、Vector3D
型のオブジェクトを指定します。
Vector3D
型オブジェクト初期化時に、x軸、y軸それぞれの回転速度を指定します。setAngularVelocity(_:)
実行後にタスクをスリープさせることで、スリープ時間中モーターの回転を継続させることができます。
上記のコードでは、毎秒0.5ラジアンの速度でy軸を中心に左回転方向に、2秒間モーターを回転させています。
アニメーション
DockKitスタンドをアニメーションで動かすことができます。デフォルトで用意されているアニメーションタイプはEnum
のDockAccessory.Animation
で定義されており、アニメーションのタイプは.kapow
、 .no
、.wakeup
、.yes
の4種類です。DockAccessory
のanimate(motion:)
でアニメーションを行うことができます。
Kapow
No
Wakeup
Yes
今回は、DockKitスタンドをコントロールするための方法を説明しました。本記事では触れていませんが、特定のオブジェクトを追跡することもできます。まだ触りきれていない部分がたくさんあるので、随時記事にしていこうと思います。
参考資料
・Integrate with motorized iPhone stands using DockKit
Discussion