iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

SwiftでiOSのカメラから写真を撮影して表示する方法

はじめに:UIImagePickerControllerとAVFoundationの使い分け

Swiftでカメラから写真を撮影するには、iOS SDKに含まれるフレームワーク「AVFoundation」を利用することができます。ただし、AVFoundationは高度なカスタマイズが可能な反面、実装が複雑になるため、カスタム機能が大量に必要な場合を除いて使わない方が賢明です。

本記事では、シンプルに「カメラで写真を1枚撮影し、画面に表示する」という処理を実装します。AVFoundationの代わりに、より手軽に扱えるUIImagePickerController(イメージピッカー)を使用しましょう。

1. プロジェクトの準備

まず、新規プロジェクトを作成し、ストーリーボード上のView ControllerにUIImageViewを配置します。続けて、クラス内に該当するアウトレット(Outlet)を作成してください。

次に、ViewControllerクラスを以下の2つのデリゲートに準拠させます。

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

2. カメラを起動するメソッドを作成する

次に、@objc属性を付けた関数を作成します。この関数は、後ほど追加するタップジェスチャーから呼び出されるセレクタとして機能します。

@objc func openCamera(){
}

3. タップジェスチャーを追加する

viewDidLoad内で、ViewControllerのビューにUITapGestureRecognizerを追加します。これにより、画面がタップされたタイミングでopenCamera関数が呼び出されるようになります。

override func viewDidLoad() {
    super.viewDidLoad()
    let gesture = UITapGestureRecognizer(target: self, action: #selector(openCamera))
    self.view.addGestureRecognizer(gesture)
}

4. カメラ起動処理を実装する

openCamera関数の中に、以下のコードを記述します。

@objc func openCamera() {
    let imgPicker = UIImagePickerController()
    imgPicker.delegate = self
    imgPicker.sourceType = .camera
    imgPicker.allowsEditing = false
    imgPicker.showsCameraControls = true
    self.present(imgPicker, animated: true, completion: nil)
}

各プロパティの役割は以下の通りです。

  • delegate:デリゲートを自分自身(self)に設定し、撮影結果を受け取れるようにします。
  • sourceType:ソースタイプを.cameraに指定することで、フォトライブラリではなくカメラを起動します。
  • allowsEditingfalseにすることで、撮影後の編集画面をスキップします。
  • showsCameraControlstrueにすることで、標準のシャッターボタンなどのカメラUIを表示します。

5. 撮影した画像を取得する

ここまでの手順が完了したら、UIImagePickerControllerDelegateのdidFinishPickingMediaWithInfoメソッドを実装します。このメソッド内で、ユーザーがカメラで撮影した画像を取得できます。

なお、今回はallowsEditingをfalseにしているため、編集済み画像ではなくoriginalImage(元画像)のキーから画像を取り出す点に注意してください。

func imagePickerController(_ picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let img = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        self.imgV.image = img
        self.dismiss(animated: true, completion: nil)
    } else {
        print("error")
    }
}

画像の取得に成功したら、取得したUIImageをあらかじめ用意しておいたImageViewにセットし、dismissメソッドでカメラ画面を閉じています。

6. Info.plistにカメラ使用の許可を設定する

最後に、info.plistに「Privacy - Camera Usage Description」(NSCameraUsageDescription)キーを追加し、アプリがカメラを使用する理由を記述する必要があります。この設定を行わないままカメラへアクセスしようとすると、アプリは強制終了してしまうので注意しましょう。

以上の手順を完了させ、iPhoneの実機でアプリを実行して写真を撮影すると、撮影した画像が画面上のImageViewに表示されます。

SwiftでiOSのカメラから写真を撮影して表示する方法

注意点

カメラ機能はシミュレーターでは動作しないため、テストは必ずiPhoneなどの実機で行ってください。

  1. OneNoteで画像からテキストを抽出する方法|OCR機能の使い方を徹底解説

    OneNoteは、メモの作成・編集・保存ができるOfficeアプリケーションです。表、画像、リンク、ファイルの印刷出力、動画クリップ、音声録音など、ほぼあらゆる種類のコンテンツを挿入できる点も大きな特徴です。 実はMicrosoft OneNoteには、OCR(Optical Character Recognition:光学文字認識)機能が標準搭載されています。この機能を活用すれば、画像やファイル印刷出力からテキストをコピーし、ノートに貼り付けることが可能です。特に、スキャンしてOneNoteに取り込んだ名刺から情報をコピーしたい場合などに非常に便利です。抽出したテキストは、OneNote内

  2. 特定のiOSアプリに位置情報を使わせないようにする方法

    位置情報の利用を歓迎したいアプリもあります。例えば、カメラアプリで撮影した写真に自動的に位置情報(ジオタグ)を付けてほしい場合などがそうです。しかし、すべてのアプリに現在地を知られたくはないはずです。リンクを共有しただけでSNSの友人に自分の居場所が伝わってしまうのは、避けたいところですよね。そこで今回は、特定のアプリから位置情報へのアクセスを遮断する方法をご紹介します。 位置情報サービスの基本設定 まず「設定」アプリを開き、「プライバシー」>「位置情報サービス」と進みます。ここには、すべてのアプリの位置情報アクセスを一括で管理できるマスタースイッチと、アプリごとの個別設定が並んでいます。