こんにちは、TYと申します。
今回はSwift5とiOS12でカメラ機能を実装したいと思います。
Swiftの基本操作はわかってきた。そろそろ踏み込んでもいいのでは?と思い、よく使われるであろう「カメラ」を実装してみようと思う。
ググってみるとカメラを実装できるフレームワークは複数あるらしい。
UIImagePickerController
https://developer.apple.com/documentation/uikit/uiimagepickercontroller
これを使えば簡単に写真、動画、編集機能を実装できるらしい。しかし、プレビュー画面の編集はオリジナルに加工できないとある。
今回の実装するカメラは、プレビュー画面をオリジナルにしたいのでこれは不採用。
AVCaptureStillImageOutput
https://developer.apple.com/documentation/avfoundation/avcapturestillimageoutput
これを使えばプレビュー画面に別のViewを重ねたりできるがUIImagePickerControllerと比べて実装が複雑らしい。
複雑なのは嫌だが、汎用性を求めるのであれば仕方あるまい、採用!
使用するフレームワークも決まったので、早速実装してみる。
まずは、フレームワークをインポート
1 2 3 4 5 6 7 8 |
import UIKit import AVFoundation class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } } |
入出力を管理するAVCaptureSessionクラスを使用して、カメラの画質を設定、次に画質の設定はAVcaptureSession.sessionPresetプロパティで実施します。
数々の画質設定が用意されていましたが、今回は高解像度の画像出力ができるphotoを設定しました。
1 2 3 4 5 6 |
// デバイスからの入力と出力を管理するオブジェクトの作成 var session = AVCaptureSession() // 画質の設定 func setupCaptureSession() { session.sessionPreset = AVCaptureSession.Preset.photo } |
デバイスを管理するAVCaptureDeviceクラスを使用してデバイスの本体の設定を実施します。
1 2 3 4 5 6 7 |
// デバイスの設定 var device: AVCaptureDevice! func setupDevice() { // カメラデバイスのプロパティ設定 //背面カメラを選択 device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) } |
ここで入出力データを設定します。
デバイスのカメラの入力を初期化します。設定した情報をAVCaptureDeviceInputクラスを使用し、AVCaptureSessionに追加します。
最後にAVCapturePhotoOutputオブジェクトをAVCaptureSessionに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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の設定まで行いたいと思います。