事前準備

本 SDK を使用したアプリケーションが動作するスマートフォンと THETAを無線 LAN 接続しておきます。

THETA Clientのインスタンス作成

import THETAClient

// THETAがIPアドレスを指定して作成する
ThetaRepository.Companion.shared.doNewInstance(
  endPoint:"http://<THETA IP ADDRESS>"
) {response, error in
  if let instance = response {
    theta = instance
  }
  if let thetaError error {
    // handle error
  }
}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
  <dict>
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <false/>
      <key>NSExceptionDomains</key>
      <dict>
    <key>192.168.1.1</key>
    <dict>
      <key>NSIncludesSubdomain</key>
      <false/>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
      <false/>
    </dict>
      </dict>
    </dict>
  </dict>
</plist>

静止画を撮影する

まずThetaRepository.getPhotoCaptureBuilder()を使って撮影設定を行い、PhotoCaptureオブジェクトを生成します。

Task {
  do {
    let photoCapture: PhotoCapture = try await withCheckedThrowingContinuation {continuation in
      PhotoCaptureBuilder()
       .setIsoAutoHighLimit(iso: ThetaRepository.IsoAutoHighLimitEnum.iso1000)
       .setFileFormat(fileFormat: ThetaRepository.PhotoFileFormat.image5k)
       .build {capture, error in
         if let photoCapture = capture {
           continuation.resume(returning: photoCapture)
         }
         if let thetaError = error {
           continuation.resume(throwing: thetaError)
         }
       }
    }
  } catch {
    // catch thetaError
  }
}

上の例では ISO 感度の最大値を 1000 に、ファイルフォーマットを image5kに設定しています。

プレビューを表示する方法はプレビューを表示するをご覧ください。

次にPhotoCapture.takePicture(callback:)を呼んで静止画を撮影します。以下のようにPhotoCaptureTakePictureCallbackを実装したコールバック用クラスを作成して呼び出します。

do {
  class Callback: PhotoCaptureTakePictureCallback {
      let callback: (_ fileUrl: String?, _ error: Error?) -> Void
      init(_ callback: @escaping (_ fileUrl: String?, _ error: Error?) -> Void) {
          self.callback = callback
      }
      func onSuccess(fileUrl: String) {
          callback(fileUrl, nil)
      }
      func onError(exception: ThetaRepository.ThetaRepositoryException) {
          callback(nil, exception as? Error)
      }
  }
  let fileUrl: String = try await withCheckedThrowingContinuation {continuation in
      photoCapture.takePicture(
        callback: Callback {fileUrl, error in
            if let photoUrl = fileUrl {
                continuation.resume(returning: photoUrl)
            }
            if let thetaError = error {
                continuation.resume(throwing: thetaError)
            }
        }
      )
  }
  // send GET request for fileUrl and receive a JPEG file
} catch {
  // catch error while take picture
}

静止画撮影時に設定できる項目