보드타는 IOS 개발자 🏂📱

Swift 사진찍기 / 사진앨범에서 사진 가져오기 (Camera and Phone Library) 본문

Swift

Swift 사진찍기 / 사진앨범에서 사진 가져오기 (Camera and Phone Library)

yunjjang 2019. 4. 12. 19:48

안녕하세요.

보드타는 ios개발자 윤짱입니다🏂

 

오늘은 카메라 기능과 앨범에서 사진을 가져오는 방법에 대해 알아보려고합니다.

 

저번 프로젝트에서 FirstViewController에 UI를 변경하여 진행해볼까 합니다. 

 

 

button 3개와 ImageVIew를 넣었습니다.

각 버튼을 눌러 필요한 기능을 실행 시킨 후 

가져오는 이미지를 imageView에 설정해 주는 작업을 해볼겁니다. 

 

먼저 plist에 permission작업을 해줍니다. 

plist 추가 

 

이후에 아래와 같이 FirstViewController에 가서 IBAction작업을 해줍니다. 

viewDIdLoad에서 delegate를 self로 해줍니다. 

카메라와 앨범을 실행시키는데 필요한 UIImagePickerController()를 변수에 지정해 준뒤 

아래와 같이 UIImagePickerControllerDelegate, UINavigationControllerDelegate를 상속받은 extension을 생성해 줍니다. 

 

이후에 아래와 같이 IBAction에 다음과 같은 코드를 적용시켜주고 실행시키면 우선 카메라와 앨범을 실행시킬 수 있습니다. 

카메라 실행 시키는 모습

카메라를 실행시키고 permission 을 허용하고 사진을 찍은후에 오른쪽 아래를 클릭해서

use picture을 해도 아무 일이 생기지 않습니다. 

사진을 가져오는 작업은 extension에서 해야합니다.

저희는 delegate를 선언하고 extension을 만들어 두었죠 

extension 에서 해결해 보면 될거 같습니다. 

didFinishPickingMediaWithInfo함수

함수 이름에서부터 사진을 찍은 후에 실행되는 함수라는걸 알 수 있습니다.

여기에서 info에 사진에 정보가 들어있겠네요.

Dictionary타입인 이 친구를 까보면 아래와 같습니다. 

info.mov
9.49MB
info에서 image를 가져오는 모습

저희가 imagePickerController를 열때 present로 열어주었는데요. 

위에 사진을 찍는 영상을 보실때 usePicture를 하면 자동으로 dismiss가 되지만, 

이 메소드가 실행할때는 dismiss를 직접 실행 시켜주어야 합니다. 

 

camera로 찍은 모습

 

Use Photo를 클릭 이후에 모습

 

ImageView에 이미지가 잘 들어오네요 ㅎㅎ 다행입니다. 

앨범도 똑같이 실행 시키면 같이 적용될거에요.

저는 여기서 한번 더 생각해 본게,

혹시 permission을 거부 했다면, 사용자가 다시 앱에서 사진을 찍고 싶고 앨범을 쓰고 싶다면, 

개발자로써 사용자의 편의성을 한번 생각해 보게 되었습니다. 

시스템함수(permission)는 앱이 실행되고, notDetermined인 경우 딱, 한번만 실행도기 때문에 한번 승인하거나 거부 할 경우 

더이상 실행 되지 않습니다. 그래서 저는 이후에는 alert을 직접 만들어 사용자들이 바로 해당 앱의 설정화면으로 가서

permission 허용을 바로 할 수 있도록 앱사용자가 조금더? 편하게 짜봤습니다. 

 

첫번째로 이후 PHPhotoLibrary를 사용하기 위해 Photos을 import해주는 작업을 했습니다. 

 

 

저희는 네개의 중에 세개만 사용해 볼까 합니다. (restricted는 잘 모르겠어요.. 죄송합니다.)

denied의 경우에는 permission을 거부 했을 경우 

autorized의 경우에는 permission을 허용했을 경우,

notDetermined의 경우에는 앱에서 처음 permission을 물어볼 경우 시스템 alert이 실행됩니다. 

이후에는 notDetermined에서 승인과 거부를 나눠서 짜볼 생각입니다. 

 

먼저 처음에 버튼 세개중에 사용안했던 '세팅' 버튼에 IBAction을 만들어 주고

아래와 같이 해당 앱의 세팅화면으로 이동하는 구문을 넣어줍니다.

settingBtn클릭 이후 모습, 빨강색 안에 뒤로가기로 편히 앱으로 돌아갈 수 있습니다.

세팅화면으로 전환되면서 앱 설정을 할수 있게 되었네요,

하지만 버튼 클릭하자마자 넘어가는건 사용자가 싫어 할 거 같아서 alert을 추가 시켜 줘서 시스템함수처럼 만들어 봤습니다. 

Bundel.main.infoDictionary로 app이름을 가져와서 좀 더 시스템함 수 처럼 만들어 봤습니다. 

시스템함수

 

  거부했을 경우 만들어본 alert

자 이제 위에서 cameraBtn IBAction에서 switch문을 사용한 곳에서 코드만 짜주면 끝입니다.! ㅎㅎㅎ

denied일 경우 시스템함수를 거부했기 때문에 만들어논 alert을 열어줍니다. 

그리고, authorized는 시스템함수에서 처음 허용한 이후 다시 camera를 사용하기 때문에

맨처음 해줬던 코드를 넣어주었으며,

notDetermined 앱실행시 딱 한번! 나오는 경우에는 클로저를 이용해 state를 허용했을때와 아닌 경우를 나눠줘 봤습니다.

 

 

 

 

오늘 포스팅은 여기서 마무리 하겠습니다. 

 

모르는 것도 많고 더 배우고 싶은 것도 많은 초보개발자입니다. 

많은 의견과 댓글 부탁드립니다. 

항상 배우는 자세이며, 

많은 분들과 소통 할 수 있으면 감사하겠습니다. 

 

카톡 : Yun0330

메일 : toutt123@icloud.com

 

'Swift' 카테고리의 다른 글

Swift 간단한 사진 필터 작업  (0) 2019.05.04
Comments