目的

iOSで簡易カメラ機能を作成するときのメモ
標準アプリのような潤沢な機能はなく、ただ撮って保存するだけです。

本当はアプリから標準のカメラアプリを呼び出せればいいんだけど(URLスキームとかで)、なぜか無い。
作れってことでしょうか。


環境

Xcode 10.3
swift5.0


参照ページ

CodeCampus 【はじめてのiPhoneアプリ開発】カメラを使おう
かなり丁寧に記載されているが、参照ページのままだと、うまく動かないようです。

ということで、この記事でも作り方を少し変えて、残します。


作成方法

plist設定

まず、info.plist
Privacy - Camera Usage Description

Privacy - Photo Library Additions Usage Description
を追加。



Value欄もちゃんと書きます。許可画面でユーザに見せる文言となる。

また、OSが用意している撮影画面を日本語化したい場合は
Localization native development regionJapan にします。



レイアウト

レイアウトは適切に作りました。
画像はカメラ撮影を貼り付けるために。
ボタンは撮影画面に遷移するためのものです。



カメラ撮影画面はOSが準備しているのを利用します。


コード/swiftファイル

参照先も載せているので、こちらも負けじとバコッと載せます。
そこまで難しく無いと思うので、簡単なコメント飲み載せます。

import UIKit

//imagePickerControllerを利用するための読み込み
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    //レイアウトのイメージと接続
    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    //Buttonタップと接続
    @IBAction func doCamera(_ sender: Any) {
        //pickerview起動タイプの設定
        let sourceType = UIImagePickerController.SourceType.camera
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            let imagePicker = UIImagePickerController()

            //delegate設定
            imagePicker.delegate = self

            imagePicker.sourceType = sourceType
            present(imagePicker, animated: true, completion: nil)
        }
    }
    
    //撮影時の挙動
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage

        //撮影したものをimageに設定する
        imageView.image = image

        //写真に保存
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

        dismiss(animated: true, completion: nil)
    }
    
}



利用イメージ

以下のような撮影画面となります。



イメージは比率そのままで、縦か横の目一杯に設定されます。


カメラ機能作成メモは以上です。