カメラで写真を撮影する UIImagePickerController
- 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,751 views




