티스토리 뷰

반응형
아이폰에서 사진찍기나 기존 사진을 가져오기 위해서 사용하는 UIImagePickerController라는 클래스가 있습니다. 
사용하기도 매우 편하게 만들어져 있는데요. 
대부분의 책에서 Deprecated 메소드를 사용한 설명들이 있어 간단하게 정리해보려구 합니다.

이전에 어플 만들어서 올릴 때 보니까 Deprecated 메소드를 사용해 경고는 나오더라도 실행도 잘 되고 문제가 없길래 
등록 신청 했더니 바로 Reject 되어 버리더라구요.. -.-

속성(Property) 중에 보면 allowsImageEditing이 있는데요 
사진을 가져와서 이동/확대/축소 등을 할 수 있도록 하는 속성입니다.
3.1 SDK 부터는 deprecated 되었고 대신 allowsEditing을 사용해야 합니다. 

버튼을 클릭할 때, getCameraPicture라는 IBAction 메소드를 호출한다고 가정해보면 다음과 같이 사용하셔야 합니다. 
참고로 sourceType에 보통 3가지를 지정할 수 있는데요. 다음과 같습니다.
UIImagePickerControllerSourceTypeCamer: 카메라로 사진 찍을 수 있도록 설정
UIImagePickerControllerSourceTypeSavedPhotosAlbum: 카메라 롤에서 사진을 가져오도록 설정
UIImagePickerControllerSourceTypePhotoLibrary: 포토 라이브러리에서 사진을 가져오도록 설정
하지만 이것보다 더 중요한 것은 UIImagePickerControllerDelegate Protocol에 있습니다.
카메라나 포토 라이브러리에서 선택한 이미지를 처리하기 위한 Delegate로 기존에는 
"imagePickerController:didFinishPickingImage:editingInfo"를 사용했습니다. 
그러나 이 프로토콜 또한 3.0 SDK 부터 Deprecated 되어 다음과 같이 "imagePickerController:didFinishPickingMediaWithInfo"를 사용하셔야 합니다. 
즉, Dictionary 타입으로 image를 리턴하고 Key에 따라 값을 가져올 수 있습니다. 
위 예제에서는 편집된 이미지를 가져오는 것으로 설정했습니다. 
기존의 Deprecated된 Delegate 프로토콜을 사용해 보니 이미지를 가져올 때도 있고, 못 가져올 때도 있었습니다. 
이 부분은 반드시 새로 바뀐 것으로 변경하시기 바랍니다. 

아이폰 앱으로 다시 개발을 시작하려니 재미는 있는데 쉽지는 않네요.. ^^
앞으로 지속적으로 체크한 내용을 올려보려고 합니다.

<추가정보>
포토 라이브러리는 정상적으로 처리되는데 카메라로 직접 사진을 찍을 경우, 유의할 사항이 있습니다. 
사진을 찍는 순간 호출한 ViewController의 ViewDidUnload가 호출됩니다. 
즉, 만약 ViewController에 imageView를 두고 여기에 찍은 사진 이미지를 넣을 경우, 
반영이 안될 수 있다는 것이죠.. 

포토 라이브러리를 사용하는 경우에는 ViewDidUnload가 호출되지 않습니다. 
즉, 처리하는 방식이 조금 다른 것 같습니다. 
아마도 카메라로 사진을 찍을 경우, 새로운 View가 생성되어서 그런 듯 합니다. 

그래서 저는 AppDelegate에 UIImage 변수를 하나 두고, 여기에 저장하고 
ViewDidLoad에서 이 이미지를 imageView에 로드하는 방식을 선택했습니다. 

이렇게 하니 포토 라이브러리나 카메라 사진찍기나 모두 잘 처리 되네요.. 
참고하시기 바랍니다. 

 
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함