감자주먹밥

[IOS] 카메라 사용하기 UIImagePickerController 본문

IOS/UIKit

[IOS] 카메라 사용하기 UIImagePickerController

JustHm 2022. 3. 9. 00:50
728x90

IOS 공부를 하면서 이정도 했으면 이제 작은 어플이라도 만들어야 하는거 아닌가 싶어서 어플을 만들려 준비하고 보니...

역시 할 줄 모르는 부분이 있었습니다 ㅎㅎ

앨범에 있는 사진, 카메라를 이용해 사진을 불러올 수 있는 UIImagePickerController에 대해서 알아보겠습니다!


UIImagePickerController

A view controller that manages the system interfaces for taking pictures, recording movies, and choosing items from the user's media library.

사진 동영상을 찍고 사용자 앨범에 사진을 선택할 때  사용할 시스템 인터페이스를 관리하는 컨트롤러 입니다!

IOS11부터는 사진을 가져올 때 권한이 필요없게 되어 편리하게 이용할 수 있습니다!

하나씩 밖에 못 가져온다는 단점이 있고, WWDC20에서 PHPicker라는게 나와 대체될 예정이지만 사용은 해 보고 가겠습니다!!

let camera = UIImagePickerController()// portrait mode only
        camera.sourceType = .camera
        camera.allowsEditing = false 
        camera.cameraDevice = .front
        camera.cameraCaptureMode = .photo
        camera.cameraFlashMode = .auto
        camera.delegate = self
        present(camera, animated: true, completion: nil)

UIImagePickerController는 많은 옵션이 있는데 하나씩 알아보겠습니다.

.sourceType

카메라, 앨범, 특별한 순간 중 인터페이스 타입을 정할 수 있습니다. (default -> photoLibrary)

.allowsEditing

사진 촬영 후 편집 가능하게 할 건지 정할 수 있습니다. (default -> false)

.cameraDevice

전면, 후면 카메라 선택을 할 수 있습니다. (default -> rear)

cameraCaptureMode

카메라 모드가 사진, 영상 중 하나를 고를 수 있습니다. (default -> Photo)

.cameraFlashMode

플래시 유무를 정할 수 있습니다. (default -> auto)

 

이렇게 만든 컨트롤러를 present에 넣어 화면을 전환해주면 됩니다!

delegate도 설정을 해 줘야합니다.

두 가지의 delegate가 있는데 UIImagePickerControllerDelegate, UINavigationControllerDelegate 가 있습니다.

UIImagePickerControllerDelegate -> 이미지를 선택하고 카메라 사용했을 때 다양한 동작을 도와줍니다.

UINavigationControllerDelegate -> 앨범 사진을 선택했을 때, 화면 전환을 네비게이션으로 이동합니다.

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[.originalImage] as? UIImage {
            //선택된 이미지를 불러와서 표시
            imageView.image = image
        }
        picker.dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
}

imagePickerController는 이미지를 받았을 때 호출되는 함수입니다.

info 파라미터로 받은 이미지를 불러 올 수 있습니다.

imagePickerControllerDidCancel은 이미지를 선택 중 cancel을 눌렀을 때 호출됩니다.

두 함수 모두 마지막에 dismiss를 호출해서 화면을 이동해 줍니다.

 

마지막으로 실행만 하면 되는데! 시뮬레이터에선 안돌아갑니다.  카메라는 권한도 필요합니다.

plist 설정

Privacy - Camera Usage Description을 추가 해 줘야합니다.

정상적으로 실행이 되는 모습!

카메라로 테스트 한 건 못 찍었어요...

다음에는 PHPicker를 사용해 보고 정리하겠습니다!

728x90
Comments