- iOS
- 2017-05-11 - 更新:2018-02-15
この記事は最終更新日から1年以上経過しています。
システムのカメラ機能を使って写真を撮影します。
特に考えることなく、簡単に実装できますので試してみてください。
簡単に実装できますが、カスタマイズすることができないので、
カスタマイズしたい方はAVFoundationを利用してください。
カメラ利用の許可
まずはカメラを利用するためInfo.plistにカメラの利用許可を追加します。
また、写真を撮影するということは保存するためにフォトライブラリーにアクセスしますので、そちらも一緒に追加します。
Privacy - Camera Usage Description Privacy - Photo Library Usage Description
Valueには「写真を撮影します。」「写真を保存します。」等と設定します。
デリゲート
UIImagePickerControllerDelegateとUINavigationControllerDelegateを設定します。
後者が必要なのはUIImagePickerControllerの親クラスがUINavigationControllerのためです。
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
Viewの配置
StoryBoardでViewControllerにViewと、カメラ起動と保存ボタンの2つのButtonを配置します。
配置したViewを「previewView」としてOutlet接続します。
@IBOutlet weak var previewView: UIView!
カメラ起動
カメラ起動のButtonはAction接続して「cameraStart」メソッドを実行させます。
@IBAction func cameraStart(_ sender: Any) { let sourceType: UIImagePickerControllerSourceType = UIImagePickerControllerSourceType.camera // カメラが利用可能かチェック if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { // インスタンスの作成 let cameraPicker = UIImagePickerController() cameraPicker.sourceType = sourceType cameraPicker.delegate = self self.present(cameraPicker, animated: true, completion: nil) } else { print("error") } }
撮影が完了したらpreviewViewに表示します。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { previewView.contentMode = .scaleAspectFit previewView.image = pickedImage } // 閉じる処理 self.dismiss(animated: true, completion: nil) }
撮影をキャンセルした時
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { self.dismiss(animated: true, completion: nil) print("cancel") }
撮影した写真を保存する
保存ボタンをAction接続し、写真を保存させます。
// 写真を保存 @IBAction func savePicture(_ sender: Any) { let image: UIImage! = previewView.image if image != nil { UIImageWriteToSavedPhotosAlbum(image, self, #selector(ViewController.imageSave(_:didFinishSavingWithError:contextInfo:)), nil) } else { print("failed") } }
書き込み完了の結果を受け取ります。
func imageSave(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) { if error != nil { print(error.code) } else { print("succeed") } }
2,558 views