본문 바로가기

iOS/스위프트로 아이폰 앱 만들기

[15장] Camera & Photo Library

728x90

카메라와 포토 라이브러리 앱을 사용합니다.

 

초기 환경 세팅

카메라와 포토 라이브러리를 사용하기 위해서는 ImagePickerController의 델리게이트 프로토콜과 MobileCoreServices 헤더 파일이 필요합니다.

그리고 UIImagePickerController 인스턴스를 생성합니다.

import UIKit
import MobileCoreServices

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    let imagePicker: UIImagePickerController! = UIImagePickerController()
    ...

 

 

사진 촬영하기

camera가 이용 가능한 경우에 delegate와 설정값을 정의해서 카메라 뷰를 띄웁니다.

photoLibrary, video에는 각 경우에 맞게 설정값을 맞추면 됩니다.

    @IBAction func btnCaptureImageFromCamera(_ sender: UIButton) {
        if (UIImagePickerController.isSourceTypeAvailable(.camera)) {
            flagImageSave = true
            imagePicker.delegate = self
            imagePicker.sourceType = .camera
            imagePicker.mediaTypes = [UTType.image.identifier]
            imagePicker.allowsEditing = false
            
            self.present(imagePicker, animated: true, completion: nil)
        } else {
            myAlert("Camera inaccessable", message: "Application cannot access the camera.")
        }
    }

 

동작 후 액션

// 선택인 끝난 경우
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {     let mediaType = info[UIImagePickerController.InfoKey.mediaType] as! NSString
    if mediaType.isEqual(to: UTType.image.identifier) {
        captureImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        if flagImageSave {
            UIImageWriteToSavedPhotosAlbum(captureImage, self, nil, nil)
        }
        imgView.image = captureImage
    } else if mediaType.isEqual(to: UTType.movie.identifier) {
        if flagImageSave {
            videoURL = (info[UIImagePickerController.InfoKey.mediaURL] as! URL)
            UISaveVideoAtPathToSavedPhotosAlbum(videoURL.relativePath, self, nil, nil)
        }
    }
    self.dismiss(animated: true, completion: nil)
}

// 취소한 경우
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    self.dismiss(animated: true, completion: nil)
}

 

'iOS > 스위프트로 아이폰 앱 만들기' 카테고리의 다른 글

[17장] Tab & Touch  (0) 2021.10.20
[16장] Core graphics  (0) 2021.10.19
[14장] Video  (0) 2021.10.19
[13장] Audio  (0) 2021.10.17
[12장] Table View  (0) 2021.10.17