🪧

【iOS】DockKit 入門

2024/03/29に公開

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を使用してビデオ撮影機能を実装し、AVCaptureSessionstartRunning() を実行するだけで、被写体がフレーム内に収まるように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スタンドの動きをカスタマイズするためには、システムトラッキングをオフにする必要があります。DockAccessorysetSystemTrackingEnabled(_:) で、システムトラッキングのオンオフを設定することができます。

被写体の表示位置を変更

フレーミングを指定

デフォルトの設定では、被写体はフレーム内中央揃えで表示されます。
被写体を左揃え、右揃えのような特定の位置に変更する時は、DockAccessorysetFramingMode(_:) を使用します。引数にはDockAccessory.FramingMode で用意されている.automatic.left.center.right のいずれかを指定します。

被写体の表示位置 case
自動調整 .automatic
左揃え .left
中央揃え .center
右揃え .right
  • 左揃え
  • 右揃え

領域を指定

DockAccessorysetRegionOfInterest(_:) で被写体の表示領域を数値で指定することもできます。座標はiPhoneのディスプレイ左上隅が起点となります。 表示領域は正規化された座標で定義します。

DockKitスタンドのモーターをコントロール

DockKitスタンドのモーターをコントロールすることができます。DockKitスタンドは XとYの2つの回転軸で動作します。

DockAccessorysetAngularVelocity(_:) で、DockKitスタンドのモーターをコントロールします。setAngularVelocity(_:) の引数には、Vector3D 型のオブジェクトを指定します。

Vector3D 型オブジェクト初期化時に、x軸、y軸それぞれの回転速度を指定します。setAngularVelocity(_:) 実行後にタスクをスリープさせることで、スリープ時間中モーターの回転を継続させることができます。
上記のコードでは、毎秒0.5ラジアンの速度でy軸を中心に左回転方向に、2秒間モーターを回転させています。

アニメーション

DockKitスタンドをアニメーションで動かすことができます。デフォルトで用意されているアニメーションタイプはEnumDockAccessory.Animation で定義されており、アニメーションのタイプは.kapow.no.wakeup.yes の4種類です。DockAccessoryanimate(motion:) でアニメーションを行うことができます。

Kapow

No

Wakeup

Yes

今回は、DockKitスタンドをコントロールするための方法を説明しました。本記事では触れていませんが、特定のオブジェクトを追跡することもできます。まだ触りきれていない部分がたくさんあるので、随時記事にしていこうと思います。

参考資料

・Integrate with motorized iPhone stands using DockKit
https://developer.apple.com/videos/play/wwdc2023/10304/

Discussion