2020. 2. 9. 22:22ㆍiOS
UIImagePickerController
사진, 동영상촬영 및 사용자의 라이브러리로 부터 항목을 선택하는 시스템 인터페이스를 관리하는 뷰 컨트롤러이다.
UINavigationController를 상속받는 클래스임을 선언부에서 확인 할 수 있다.
imagePickerController는 사용자의 상호작용을 관리하고, 그 상호작용의 결과를 delegate객체로 전달한다.
imagePickerController의 역할, 외관은 표시하기 전 할당된 source type에 의존한다.
SourceType (enum)
photoLibrary : 저장된 사진과 영상 중 선택하는 UI를 제공한다.
camera : (미디어 캡쳐를 지원하는 기기의) 새로운 사진, 영상촬영 UI를 제공한다.
savedPhotosAlbum : 저장된 사진과 영상 중 선택하는 카메라 롤 UI를 제공한다.
Camera Roll
카메라가 없는 기기에서 'Camera Roll Album'을 'Saved Images'이라 부른다. 왜냐하면 다른 응용 프로그램이 이미지를 추가할 수 있기 때문이다. 그러나 또한 포토 라이브러리에도 모든 이미지가 있다. 앨범 생성시 앨범의 사진들은 카메라 롤의 한 사본에 대한 참조이다. 사진들은 복제가아닌, 카메라롤의 항목만 참조한다. 더 많은 공간을 필요로 하지 않고 앨범에 사진을 추가 할 수 있다.
기본조작이 포함된 imagePickerController 사용하기위한 단계
-
기기가 원하는 소스로부터의 컨텐트를 선택이 가능한지 확인. UIImagePickerControllerSourceType 구조체로부터 제공하는 isSourceTypeAvailable: 클래스 메소드를 호출하여 이뤄진다.
-
availableMediaTypesForSourceType: 클래스 메소드를 호출하여 사용 중인 소스 유형에 사용할 수 있는 미디어 유형을 확인해라. 이를 사용하여 카메라가 영상 촬영이 가능한지, 사진 촬영만 가능한지 구별할 수 있다.
-
imagePickerController에 mediaTypes프로퍼티를 설정하여 사용할 수 있는 미디어 유형에따라 UI를 조정하도록 한다. (사진만, 영상만, 또는 둘다)
-
UI 띄우기. iPhone, iPod 터치에 현재 활성화된 뷰컨트롤러의 presentViewController:animated:completion: 메소드를 호출하여 구성한 imagePickerController를 새로운 viewController로 전달하여 모달리(풀스크린)을 수행하라. iPad에서 imagePicker를 표시하는는 방법은 소스유형에 따라 다르다. ( Camera: full screen, PhotoLibrary: must popover, Saved PhotoAlbum: must popover )
-
사용자가 버튼을 눌러 새로운 캡쳐되거나 저장된 사진 또는 영상을 선택하거나, 또는 작동 취소할시 delegate 객체를 사용하여 imagePicker를 dismiss. 새로운 캡쳐 미디어의 경우 delegate가 기기의 카메라 롤에 저장할 수 있다. 이전 저장된 미디어를 위해 delegate는 앱의 목적에따라 이미지 데이터를 사용할 수 있다.
사용자의 상호작용 관리를 위해 사용자 정의 할수 있다. 그러기위해 원하는 표시할 조정이 포함된 오버레이 뷰를 제공한다.
그리고 takePicture, startVideoCapture, stopVideoCapture를 사용한다.
기본조정대신에 사용자 정의 오버레이 뷰를 추가하여 표시할수 있다.
UIImagePickerController클래스의 커스텀 오버레이 뷰는 iOS 3.1이상에서, cameraOverlayView프로퍼티를 사용한다.
중요
UIImagePickerController 클래스는 인문모드만 지원한다. 이 클래스는 하위클래스를 지원하지 않는다.
이클래스는 private한 view 계층이다. 그리고 수정하면 안된다 (한가지 예외).
cameraOverlayView프로퍼티에 사용자 정의 view를 할당 하고, 추가적인 정보를 띄우거나 또는 Camera 인터페이스와 코드 사이의 상호작용을 관리하는데 사용한다.
Delegate 객체 제공
UIImagePickerControllerDelegate iOS 4.1이상.
delegate객체 imagePicker 인터페이스와 상호작용을 위해 구현되야하는 메소드 설정.
delegate프로퍼티를 보니 처음 보는 형태인 것 같은데 UIImagePickerControllerDelegate & UINavigationControllerDelegate로 두 프로토콜을 모두 구현하는 객체로 되어있다.
사용자가 사진, 영상 또는 취소를 선택했을때 이 프로토콜의 메소드로 알려준다.
행위가 완료되었을 때 delegate 메소드는 Picker를 dismiss할 책임이 있다.
Picker를 dismiss하기위해 UIImagePickerController객체를 표시하는 상위 컨트롤러의dismissModalViewControllerAnimated: 메소드를 호출해라.
사용자의 Camera Roll Album에 사진을 저장하기위해 imagePickerController:didFinishPickingMediaWithInfo: 메소드의 바디에서 UIImageWriteToSavedPhotosAlbum함수를 호출한다.
대신 사용자의 Camera Roll Album에 영상을 저장하기위해 UISaveVideoAtPathToSavedPhotosAlbum함수를 호출한다.
UIKit Function에 설명된 이러한 기능은 사진 또는 영상만 저장한다. 메타데이터는 저장하지 않는다.
카메라롤에 이미지를 저장할때 추가적으로 메타데이터를 작성하기위해 Photos 프레임워크의 PHAssetChangeRequest클래스를 사용한다. (UIImagePickerControllerMediaMetadata 키에 있음)
간단한 사용후기
기존 저장된파일
imageurl / mediatype / originalimage
새로 캡쳐한파일
Mediatype / mediametadata / originalimage
originalimage키의 값을 uiimage로 타입캐스팅후 png 또는 jpeg data로 변환
jpeg의 경우 압축정도를 0(low)에서1(high)까지(소수)로 변환가능
'iOS' 카테고리의 다른 글
[iOS] Open Source (0) | 2020.03.10 |
---|---|
[iOS] XCTest Framework (0) | 2020.03.09 |
[iOS] App States (0) | 2020.02.04 |
[iOS] Core Location Framework (0) | 2020.02.02 |
[iOS] NCWidgetProviding Protocol (0) | 2020.01.16 |