UIImagePickerController

Panther·2021년 10월 15일
0
post-custom-banner

https://developer.apple.com/documentation/uikit/uiimagepickercontroller

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

사진 촬영, 영상 촬영, 사용자의 미디어 라이브러리로부터 아이템을 선택하기 위한 시스템 인터페이스를 관리하는 뷰 컨트롤러입니다.

Declaration

@MainActor class UIImagePickerController : UINavigationController

Overview

이미지 피커 컨트롤러는 사용자 상호작용을 관리하고 딜리게이트 객체에 해당 상호작용의 결과를 전달합니다. 이미지 피커 컨트롤러의 역할 및 모양은 이 컨트롤러를 나타내기 전 컨트롤러에 할당한 소스 타입에 의존합니다.

  • UIImagePickerController.SourceType.camerasourceType은 새 사진 혹은 영향을 촬영하기 위한 인터페이스를 제공합니다(미디어 캡처를 지원하는 기기에서).
  • UIImagePickerController.SourceType.photoLibrary 혹은 UIImagePickerController.SourceType.savedPhotosAlbumsourceType은 저장된 사진과 영상을 선택하기 위한 UI를 제공합니다.

기본값 컨트롤을 포함하는 이미지 피커 컨트롤러를 사용하려면 아래 단계를 수행해야 합니다.

  1. 기기가 원하는 소스로부터 컨텐트를 선택할 수 있는지 검증해야 합니다. isSourceTypeAvailable(_:) 클래스 메소드를 호출해서 검증할 수 있으며, UIImagePickerController.SourceType 열거형으로부터 상수를 제공합니다.

  2. availableMediaTypes(for:) 클래스 메소드를 호출해서 사용하려고 하는 소스 타입에 대한 어떤 미디어 타입이 사용 가능한지 확인해야 합니다. 이는 영상 촬용을 위해 사용될 수 있는 이미지와 스틸 이미지만을 위해 사용될 수 있는 카메라를 구분할 수 있도록 해줍니다.

  3. mediaTypes 속성을 설정해서 사용하고자 하는 미디어 타입(스틸 이미지, 영상, 둘 모두)에 따라 UI를 조정할 수 있도록 이미지 피커 컨트롤러에게 알려줘야 합니다.

  4. UI를 나타내야 합니다. 아이폰 혹은 아이팟 터치에서 현재 호라성화된 뷰 컨트롤러의 present(_:animated:completion:) 메소드를 호출해서 모달(전체 스크린)로 나타내도록 해야 하며, 새 뷰 컨트롤러로써 설정된 이미지 피커 컨트롤러를 전달하면서 나타내도록 해야 합니다.

    아이패드에서 이미지 피커를 나타내기 위한 정확한 방법은 아래 테이블에서 요약하고 있는 소스 타입에 의존하도록 하는 것입니다.

    CameraPhoto LibrarySaved Photos Album
    Use full screenMust use a popoverMust use a popover

    아이패드에 대해 테이블이 나타나는 것에서 UIImagePickerController.SourceType.photoLibrary 혹은 UIImagePickerController.SourceType.savedPhotosAlbum 소스 타입을 구체화하는 경우 팝오버 컨트롤러를 사용해서 이미지 피커를 나타내야 합니다(이에 대해서 더 알아보려면 UIPopoverPresentationController를 보시기 바랍니다). 저장된 사진과 영상 중 선택할 수 있도록 하는 이미지 피커를 모달로(전체 스크린) 나타내길 시도하려고 한다면, 시스템은 예외를 생성합니다.

    UIPopoverPresentationController https://developer.apple.com/documentation/uikit/uipopoverpresentationcontroller

    아이패드에서 UIImagePickerController.SourceType.camera의 소스 타입을 구체화하는 경우 이미지 피커를 모달(전체 스크린)로 나태낼 수 있거나 팝오버를 사용해서 나타낼 수 있습니다. 그러나 애플은 전체 스크린만으로 카메라 인터페이스를 나타낼 것을 권장합니다.

  5. 사용자가 새로 캡처된 혹은 저장된 이미지나 영상을 선택하기 위해 버튼을 탭하는 경우 혹은 동작을 취소하는 경우 딜리게이트 객체를 사용해서 이미지 피커를 해제하시기 바랍니다. 새로 캡처된 미디어의 경우 딜리게이트는 기기에서 Camera Roll에 미디어를 저장할 수 있습니다. 이전에 저장된 미디어의 경우 딜리게이트는 앱의 목적에 따라 이미지 데이터를 사용할 수 있습니다.

이와 같은 단계에 대한 세부 내용은 Taking Pictures and Movies를 참고하시기 바랍니다.

Taking Pictures and Movies
https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/CameraAndPhotoLib_TopicsForIOS/Articles/TakingPicturesAndMovies.html#//apple_ref/doc/uid/TP40010406

사용자 상호작용을 직접 관리하기 위해 이미지 피커 컨트롤러를 커스터마이징할 수 있습니다. 그렇게 하려면 표시하고자 하는 컨트롤을 포함시켜 오버레이 뷰를 제공하고, Capturing Still Images or Movies에서 설명하는 메소드를 사용하시기 바랍니다. 기본값 컨트롤에 추가적이거나 대체로 사용할 수 있는 커스텀 오버레이 뷰를 표시할 수도 있습니다. UIImagePickerController 클래스에 대한 커스텀 오버레이 뷰는 cameraOverlayView 속성을 통해서 iOS 3.1 및 이후 버전에서 사용 가능합니다. 코드 예시는 Customizing an Image Picker Controller 샘플 코드 프로젝트를 보시기 바랍니다.

Capturing Still Images or Movies는 이 글의 링크로 연결됩니다.

Customizing an Image Picker Controller
https://developer.apple.com/documentation/uikit/uiimagepickercontroller/customizing_an_image_picker_controller

Important
UIImagePickerController는 portrait 모드만을 지우너합니다. 이 클래스는 그 자체로 사용되길 의도된 것이며, 서브클래싱은 지원하지 않습니다. 이 클래스에 대한 뷰 계층구조는 private이며, 하나의 예외를 제외하고 수정되지 않아야 합니다. cameraOverlayView 속성에 커스텀 뷰를 할당할 수 있으며, 추가적인 정보를 나타내거나 카메라 인터페이스 및 코드 사이에서 상호작용을 관리하기 위해 해당 뷰를 사용할 수 있습니다.

Providing a Delegate Object

이미지 피커 컨트롤러를 사용하려면 UIImagePickerControllerDelegate 프로토콜을 따르는 딜리게이트를 제공해야 합니다. iOS 4.1을 시작으로 이미지에 따라 Camera Roll에 스틸 이미지 메타데이터를 저장하기 위해 딜리게이트를 사용할 수 있습니다. UIImagePickerControllerDelegate를 참고하시기 바랍니다.

UIImagePickerControllerDelegate
https://developer.apple.com/documentation/uikit/uiimagepickercontrollerdelegate
<>

Adjusting Flash Mode

iOS 4.0 및 이후 버전에서 사용자가 플래시 모드(플래시 LED가 있는 기기에서)를 조정할 수 있도록 해주는 것과 어떤 카메라(프론트와 rear 카메라를 갖는 기기에서)를 사용할 것인지 선택해줄 수 있는 것, 스틸 이미지와 영상 캡처 사이를 전환해주는 것을 위해 커스텀 컨트롤을 제공할 수 있습니다. 이와 같은 설정은 코드 작성으로도 관리가 가능합니다. strobe 라이트와 같은 효과를 제공하기 위해 직접 플래시를 조작할 수도 있습니다. 비디오 캡처 모드를 사용하기 위해 피커 인터페이스 집합을 나타내시기 바랍니다. 이후 cameraFlashMode 속성을 UIImagePickerController.CameraFlashMode.on 혹은 UIImagePickerController.CameraFlashMode.off에 설정해서 플래시 LED를 키거나 끄시기 바랍니다.

Working with Movies

영상 캡처는 10분의 기본값 듀레이션 제한을 갖지만, videoMaximumDuration 속성을 사용해서 조정될 수 있습니다. 사용자가 영상을 MMS, 유투브, 혹은 다른 목적지로 전송하기 위해 공유 버튼을 탭하면 적합한 듀레이션 제한 및 적합한 비디오 품질이 강제됩니다.

기본값 카메라 인터페이스는 이전에 저장된 영상의 편집을 지원합니다. 편집은 영상의 시작과 끝을 자르는 것과 관련이 있으며, 이후 잘려진 영상을 저장합니다. 새 영상 녹화 지원보다 영상 편집에 관련이 있는 인터페이스를 표시하려면, UIVideoEditorController를 사용하시기 바랍니다. UIVideoEditorController를 참고하시기 바랍니다.

UIVideoEditorController
<>

Working with Live Photos

라이브 사진은 사진이 단순히 한 시점이 아니라 움직임을 포함하고 캡처 전후의 수간으로부터 소리를 포함하는 것을 가능하게 해주는 카메라 앱 기능으로 지원되는 기기에서 지원하는 기능입니다. PHLivePhoto 객체는 라이브 사진을 나타내며, PHLivePhotoView 클래스는 라이브 사진 표시 및 라이브 사진의 컨텐트를 뒤로 재생하기 위한 시스템 표준, 상호작용 UI를 제공합니다.

라이브 사진이 소리와 움직임을 포함할지라도 사진으로 남습니다. 스틸 이미지(mediaTypes 배열에서 kUTTypeImage 타입만을 포함해서)를 캡처하거나 선택하기 위해 이미지 피커 컨트롤러를 사용하는 경우 라이브 사진으로 캡처되었던 것은 피커에서 계속 나타납니다. 그러나 사용자가 라이브 사진으로 캡처된 것을 선택하는 경우 딜리게이트 객체는 라이브 사진의 스틸 이미지 표시를 포함하면서 오직 UIImage 객체만 받습니다.

사용자가 이미지 피커를 사용해 라이브 사진을 선택해서 전체 움직임 및 소리 컨텐트를 가져오려면, mediaTypes 배열에 있는 kUTTypeImagekUTTypeLivePhoto 타입을 포함시켜야 합니다. 더 많은 정보는 UIImagePickerControllerDelegate에 있는 livePhoto를 보시기 바랍니다.

UIImagePickerControllerDelegate
<>

Fully-Customized Media Capture and Browsing

완전히 커스터마이징된 이미지 혹은 영상 캡처를 수행하려면, Still and Video Media Capture에서 설명하고 있는 것처럼 AVFoundation 프레임워크를 대신 사용하시기 바랍니다. AVFoundation 프레임워크를 사용하는 카메라 접근은 iOS 4.0 버전부터 사용이 가능합니다.

사진 라이브러리 탐색을 위해 완전히 커스터마이징된 이미지 피커를 생성하려면 Photos 프레임워크로부터 클래스를 사용하시기 바랍니다. 예를 들어 iOS에 의해 생성되고 캐시된 더 큰 썸네일 이미지를 표시하는 커스텀 이미지 피커를 생성할 수 있으며, 타임스탬프와 위치 정보를 갖는 이미지 메타데이터의 사용이 가능한 커스텀 이미지 피커도 생성할 수 있고, MapKitiCloud 사진 공유와 같은 다른 기능을 통합하는 커스텀 이미지 피커 역시 생성하 ㄹ수 있습니다. 더 많은 정보는 Photos를 보시기 바랍니다. Photos 프레임워크를 사용하는 미디어 탐색은 iOS 8.0 버전부터 사용이 가능합니다.

post-custom-banner

0개의 댓글