반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


요즘 도서관에서 이 책을 빌려서 Swift를 공부하고 있거든요.


Chapter 9 Camera, Photos, and Social Networks 를 공부하기 전에 애플의 document 를 미리 공부해 봤습니다. (UIImagePickerController)


중간에 이 책 9장에 있는 내용들도 좀 첨가 했어요.


https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImagePickerController_Class/


UIImagePicker Controller


해당 기기에서 제공하는 사진이나 비디오 촬영에 대한 기능을 다루는 클래스
그 외에 저장된 이미지나 비디오를 사용해 앱에서 활용할 수 있도록 해 줌
이 콘트롤러는 이 결과를 delegate object 에게 전달하게 된다.

초기화는 아래와 같이 한다.
var imagePicker = UIImagePickerController()

UIImagePickerControllerSourceTypeCamera: 사진이나 비디오를 찍을 때 사용해
UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeSavedPhotosAlbum: 저장된 사진이나 비디오를 활용할 때 사용해

사용 방법
1. isSourceTypeAvailable를 사용해서 사용 가능 여부를 판별한다. UIImagePickerControllerSourceType enumeration 로부터 constant가 제공된다.


if UIImagePikcerController.isSourceTypeAvailable(.Camera) {
// 카메라 사용 가능 하면 소스타입을 세팅한다.
imagePicker.sourceType = .Camera
} else {
// 카메라 사용 불가능
}

기기에 따라 전면/후면 카메라가 있을 수 도 있는데 이럴 땐 이렇게 사용한다.

if UIImagePikcerController.isCameraDeviceAvailable(.Front) {
// 전면 카메라 사용 가능
} else {
// 전면 카메라 사용 불가능
}

if UIImagePikcerController.isCameraDeviceAvailable(.Rear) {
// 후면 카메라 사용 가능
} else {
// 후면 카메라 사용 불가능
}

사용 가능한 카메라가 없으면 UIImagePickerController는 사용자에게 Photo Library에서 사진이나 비디오를 고를 수 있도록 해 줄 수 있다.
imagePicker.sourceType = .PhotoLibrary

2. availableMediaTypesForSourceType 를 사용해서 가능한 소스타입을 체크한다. 사진과 비디오에 대한 사용을 구분해 준다.


3. mediaTypes property 를 세팅함으로서 image picker controller 에게 해당 미디어 타입(사진, 비디오)에 해당되는 UI를 조정해 준다.

모바일 타입을 바꾸려면 Mobile Core Services 프레임워크를 import 해야 한다.
이 프레임워크에는 다음과 같은 키워드가 있다.
kUTTypeImage : Photos and images
kUTTypeMovie : Movies and videos

mediaTypes 프로퍼티를 배열에 넣고 사용한다.
imagePicker.mediaTypes = [kUTTypeImage]
imagePicker.mediaTypes = [kUTTypeMovie]

4. 현재 활성화 된 View의 presentViewController:animated:completion:를 호출 함으로서 iPhone, iPod touch 등에 맞는 UI를 제공한다.
   새로운 view controller 로 현재 configure 된 image picker controller 를 passing 하게 된다.
   iPad 에서는 소스타입에 따라 image picker를 제공하는 방법이 다른데 아래를 참고 하면 된다.
   Camera               | Photo Library              | Saved Photos Album
   Use full screen     | Must use a popover     | Must use a popover

  
소스 타입이 UIImagePickerControllerSourceTypePhotoLibraryUIImagePickerControllerSourceTypeSavedPhotosAlbum이면 popover controller 를 사용해서 image picker를 제공해야 한다. full screen으로 제공하려고 하면 exception이 일어날 것이다.

Presenting and Dismissing the Popover.

UIImagePickerControllerSourceTypeCamera소스타입을 사용하면 이 image picer를 full-sccreen 이나 popover 아무거나 사용할 수 있다. 애플에서는 full-screen을 사용할 것을 추천하고 있다.

5. 새로 찍거나 저장돼 있는 사진이나 비디오를 선택하기 위해 사용자가 버튼을 누르거나 해당 작업을 cancel 하면 delegate object를 사용한 image picker 가 dismiss 하게 된다. 새로 찍힌 미디어는 delegate 가 이것을 기기의 카메라 롤에 저장할 수 있다. 이전에 저장된 미디어인 경우 delegate는 원하는 대로 이용 될 수 있다. 보다 자세한 사항은 Taking Pictures and Movies. 를 참조.

image picker controller를 customize 할 수 있다. 이렇게 하려면 overlay view를 사용한다. 이 overlay view 는 display 하려는 것을 콘트롤 하고   Capturing Still Images or Movies 에 있는 메소드들 을 사용하게 된다.

cameraOverlayView

custom overlay view를 display 할 수도 있다.
UIImagePickerController 클래스에 대한 Custom overlay view는 iOS 3.1 이상에서 가능하다. cameraOverlayView property 를 사용하면 된다.
Using UIImagePickerController to Select Pictures and Take Photos 에 그 예제가 있다.

Important
UIImagePickerController 는 portrait 모드만 지원한다. 이 클래스는 subclassing을 지원하지 않는다. view hierarchy 는 private 이고 modified 될 수 없다. 예외가 있다면 custom view를 cameraOverlayView 프로퍼티에 assign 할 수 있다. 그렇게 하면 추가적인 정보를 제공할 수 있고 카메라 인터페이스와 여러분의 코드 사이의 상호작용을 관리할 수 있다.




Delegate Object 제공하기

image picker controller를 사용하려면 UIImagePickerControllerDelegate protocol에서 허용된 delegate를 제공해야 한다. iOS 4.1 부터는 이미지와 함께 카메라 롤에 사진의 metadata 도 저장할 수 있게 됐다.
See UIImagePickerControllerDelegate Protocol Reference


UIImagePickerController에 미디어에서의 이벤트들을 전달하기 위해서는 delegate를 사용하는데 현재 뷰 콘트롤러에서 작업하는 경우는 self를 사용한다.
imagePicker.delegate = self
물론 클래스를 만들 때 이 delegate를 넣어야 한다.
class ViewController: UIViewController, UIImagePickerControllerDelegate {
}

UIImagePickerController는 UINavigationController를 상속했기 때문에 그 delegate도 UINavigationControllerDelegate 프로토콜을 상속하고 있다.
이 프로토콜은 push나 pops 같은 UINavigationController 이벤트의 update들을 전달한다. 이것을 사용하려면 이렇게 한다.
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
}

사진이 찍히거나 앨범에서 사진이 선택 됐을 때 UIImagePickerControllerDelegate는 아래 메소드를 호출한다.
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {}

사용자가 사진이나 비디오를 생성하거나 선택했을 때는 아래 메소드를 호출한다.
func imagePickerController(picker:UIImagePickerController, didFinishPickingMediaWithInfo: [NSObject : AnyObject]) {}

Flash Mode 조정하기

iOS 4.0 부터 사용자가 flash 모드, 전면/후면 카메라 사용 그리고 사진과 비디오 촬영을 선택할 수 있도록 하는 custom control을 제공할 수 있다. 그리고 프로그램으로 이 기능들을 컨트롤 할 수도 있다. 그리고 flash 의 strobe light 같은 것들도 콘트롤 할 수 있다.
cameraFlashMode property 를 UIImagePickerControllerCameraFlashModeOn UIImagePickerControllerCameraFlashModeOff에 세팅함으로서 flash LED를 켜거나 끌 수 있다.

Working with Movies


비디오 촬영시간의 디폴트 는 10 분이지만 videoMaximumDuration property를 사용해서 조정할 수 있다.
사용자가 share 버튼을 눌러서 MMS, MobileMe, YouTube, or another destination으로 비디오를 보낼 때 적당한 duration limit 과 적당한 video 퀄리티가 enforce 된다.

디폴트 카메라 인터페이스는 이전에 저장된 비디오를 editing 할 수 있도록 지원한다. Editing 은 비디오의 첫부분이나 끝 부분부터 일정 부분을 잘라내서 그 부분을 저장하는 기능이다. 이 인터페이스를 표시하려면 UIVideoEditorController 클래스를 사용한다.
See UIVideoEditorController Class Reference.

allowsEditing 프로퍼티를 true로 놓는다.
imagePicker.allowsEditing = true로
이렇게 하면 편집 스크린이 추가될 것이다.

Fully-Customized Media Capture and Browsing

fully-customized image/비디오 캡쳐를 실행하려면  Media Capture and Access to Camera에서 설명하고 있는 AV Foundation framework을 사용한다. 이 AV Foundation framework을 이용해서 카메라를 사용하는 것은 iOS 4.0 이후부터 가능해 졌다.

photo library를 살펴보기 위해 fully-customized image picker를 생성하려면 Photos framework에 있는 클래스들을 사용한다. 예를 들어 더 큰 thumbnail 이미지를 표시하는 custom image picker를 생성할 때 timestamp 와 위치정보를 포함한 이미지의 메타데이터를 사용하거나  MapKit 과 iCloud Photo sharing등과 같은 기능하고 같이 사용하도록 할 수 있다. 좀 더 자세한 사항은 Photos Framework Reference를 보면 된다. Photos framework을 이용한 Media browsing은 iOS 8.0 이상부터 가능하다.



Setting the Picker Source


반응형

Comment

이전 1 2 3 4 5 6 7 8 9 다음