[iOS / Swift 5.2] 사진앨범(갤러리/포토 라이브러리)에서 사진(이미지) 가져오기

Lena·2020년 2월 7일
1
post-thumbnail

결과: 선택 버튼을 누르면 포토 라이브러리(갤러리)로 이어진다. 갤러리에서 이미지를 선택하면 해당 이미지를 가지고 온다.

필요한 코드

  1. UIImagePickerController 인스턴스 생성
  2. viewDidLoad()에 UIImagePickerController 인스턴스의 delegate = self로 설정
  3. 버튼을 눌렀을 때 imagePickerController의 소스타입을 photoLibrary로 설정하고 present 하기
  4. ViewController extension 후 UIImagePicerControllerDelegate와 UINavigationControllerDelegate를 채택.
  5. imagePickerController 메소드 구현 (기본 형식은 자동완성 됨)
    포토 라이브러리(갤러리)에서 이미지 선택 후 호출되는 메소드이다. 가지고 온 이미지를 UIImage로 변환 후 photoImageView의 이미지로 넣어준다.
    info는 Dictionary로 이뤄져 있고 type, url, originalImage를 키로 갖는 3쌍으로 이뤄져 있다. 그래서 포토 라이브러리(갤러리)에서 사진을 가져올 때, info Dictionary에서 UIImagePickerControllerOriginalImage를 키로 가지는 값을 가지고 오면 UIImage를 얻을 수 있다. 또한 포토 라이브러리(갤러리)에서 이미지를 선택해서 가지고 오는 메소드를 구현해도 이미지를 선택하는 화면을 dismiss 하지 않으면 이전 화면으로 돌아가지 않는다. dismiss 잊지 말자!

실패한 것과 결론

[ 실패 하나 😢]

viewDidLoad에서 코드를 추가하면

imagePickerController.delegate = self

Cannot assign value of type 'SecondViewController' to type '(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?' 이라는 메세지의 에러가 발생한다.
[ 결론 👩‍💻 ]
ViewController의 extension 생성해주지 않아서 에러가 난 것이었다. 따라서 UIImagePickerControllerDelegate, UINavigationControllerDelegate를 상속받은 extention을 생성해준다.

[ 실패 둘 😢]
포토 라이브러리(갤러리)에서 사진을 선택한 후 이전 화면으로 돌아가지 않았다.

[ 결론 👩‍💻 ]

dismiss(animated: true, completion: nil)

사진을 선택하는 화면을 dismiss하는 코드를 추가한다.

궁금한 점

🧐❓: 사진 라이브러리(갤러리)에서 이미지를 가지고 오는 과정에서 Delegate 는? 위임 관계는 어떻게 될까? 무엇을 위임하는 걸까?

😁 ❗️
... 찾아서 업데이트 할 예정.

🧐❓:UIImagePickerControllerDelegate를 채택 할 때 UINavigationControllerDelegate도 채택해야하는 이유는?

UIImagePickerControllerDelegate의 delegate 속성은 UIImagePickerControllerDelegate와 UINavigationControllerDelegate 프로토콜을 모두 구현하는 객체로 정의되어있다.

 override func viewDidLoad() {
        super.viewDidLoad()
     imagePickerController.delegate = self
}

여기서 self를 UIImagePickerController.delegate에 할당하려면 self는 UINavigationControllerDelegate 타입이어야 한다.

지금, imagePickerController의 델리게이트를 UINavigationControllerDelegate에 위임해준 것인데, 대리자는 사용자가 이미지나 동영상을 선택하거나 imagePickerController 화면을 종료할 때, 알림을 받는다.

참고하면 좋은 곳

Apple이 제공하는 Documentation Archive에 입문자를 위해 앱을 만들어보는 튜토리얼이 있는데, Create an Image Picker to Respond to User Taps 이 부분부터 자료가 나와있습니다.

profile
Swift, iOS 앱 개발 공부하고 있어요!

0개의 댓글