こんにちは、TYと申します。
今回はSwift5とiOS12でカメラ機能を実装したいと思います。
Swiftの基本操作はわかってきた。そろそろ踏み込んでもいいのでは?と思い、よく使われるであろう「カメラ」を実装してみようと思う。
ググってみるとカメラを実装できるフレームワークは複数あるらしい。
UIImagePickerController
https://developer.apple.com/documentation/uikit/uiimagepickercontroller
これを使えば簡単に写真、動画、編集機能を実装できるらしい。しかし、プレビュー画面の編集はオリジナルに加工できないとある。
今回の実装するカメラは、プレビュー画面をオリジナルにしたいのでこれは不採用。
AVCaptureStillImageOutput
https://developer.apple.com/documentation/avfoundation/avcapturestillimageoutput
これを使えばプレビュー画面に別のViewを重ねたりできるがUIImagePickerControllerと比べて実装が複雑らしい。
複雑なのは嫌だが、汎用性を求めるのであれば仕方あるまい、採用!
使用するフレームワークも決まったので、早速実装してみる。
まずは、フレームワークをインポート
import UIKit
import AVFoundation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
入出力を管理するAVCaptureSessionクラスを使用して、カメラの画質を設定、次に画質の設定はAVcaptureSession.sessionPresetプロパティで実施します。
数々の画質設定が用意されていましたが、今回は高解像度の画像出力ができるphotoを設定しました。
// デバイスからの入力と出力を管理するオブジェクトの作成
var session = AVCaptureSession()
// 画質の設定
func setupCaptureSession() {
session.sessionPreset = AVCaptureSession.Preset.photo
}
デバイスを管理するAVCaptureDeviceクラスを使用してデバイスの本体の設定を実施します。
// デバイスの設定
var device: AVCaptureDevice!
func setupDevice() {
// カメラデバイスのプロパティ設定
//背面カメラを選択
device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
}
ここで入出力データを設定します。
デバイスのカメラの入力を初期化します。設定した情報をAVCaptureDeviceInputクラスを使用し、AVCaptureSessionに追加します。
最後にAVCapturePhotoOutputオブジェクトをAVCaptureSessionに追加します。
func setupDevice() {
//セッションを生成
session = AVCaptureSession()
//背面カメラを選択
device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
//背面カメラからキャプチャ入力生成
guard let input = try? AVCaptureDeviceInput(device: device)
else {
print("例外発生")
return
}
session.addInput(input)
output = AVCapturePhotoOutput()
session.addOutput(output)
}
ここまでできた!!が、カメラの映像を画面に表示するのはまだまだ手間がいるらしい。
次回はカメラの映像を画面に表示し、シャッターボタンの作成やUIの設定まで行いたいと思います。