사진을 찍을 수도 있고, Photo Library에서 선택을 할 수 있는데, 현재의 iOS가 지원을 하는지 확인이 필요하다. iPad 2부터는 기본적으로 카메라가 있으므로 구분할 필요가 없겠지만....
소스
Boolean cameraEnabled = NO; Boolean photoLibEnabled = NO; if( [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ cameraEnabled = YES; } if( [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ photoLibEnabled = YES; }
카메라 촬영이 가능한지, 포토 라이브러리를 접근하는 것이 가능한지를 알 수 있는 함수가 위 2가지 함수이다.
이 정보를 가지고, ActionSheet를 통해서 새로 찍을 것인지, 기존 것을 선택할 것인지 선택하게 하고, 사진을 찍을 경우와 선택할 경우를 따로 구분해서 UIImagePickerController를 만든다.
소스
카메라를 사용할 수 있고, 지원하는 타입에 이미지 형식이 있을 경우..
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera]; if ([mediaTypes containsObject:(NSString *)kUTTypeImage]) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage]; picker.allowsEditing = NO; [self presentViewController:picker animated:YES completion:^{ NSLog(@"presentViewController completion"); }]; }포토 라이브러리를 사용할 수 있고, 지원하는 타입에 이미지가 있을 경우..
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; if ([mediaTypes containsObject:(NSString *)kUTTypeImage]) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage]; picker.allowsEditing = NO; [self presentViewController:picker animated:YES completion:^{ NSLog(@"presentViewController completion"); }]; }아래는 이미지를 선택하거나 사진을 찍은 후에, UIImagePickerControllerDelegate로 받는 함수들이다. dismissImagePicker, Cancel, didFinishPickingMediaWithInfo함수가 있다.
- (void)dismissImagePicker { [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"dismissViewControllerAnimated completion: "); }]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self dismissImagePicker]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //Editing된 이미지를 가져온다. UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; //Edit하지 않았으면 원 이미지를 가져온다. if (!image) image = [info objectForKey:UIImagePickerControllerOriginalImage]; if (image) { [self setImage:image]; //가져온 이미지를 처리한다. } [self dismissImagePicker]; }
설명
왼쪽의 화면이 3가지 종류의 Media Type을 선택할 수 있는 ActionSheet를 표시한 것이다.
UIImagePickerControllerSourceType
The source to use when picking an image or when determining available media types.
와 같이 3가지 종류가 있다.enum {
UIImagePickerControllerSourceTypePhotoLibrary,
UIImagePickerControllerSourceTypeCamera,
UIImagePickerControllerSourceTypeSavedPhotosAlbum
};
typedef NSUInteger UIImagePickerControllerSourceType;
카메라를 선택할 경우 왼쪽과 같이 카메라를 찍고, 그 사진을 선택할 수 있다.
Photo Library를 이용할 경우, 사용자에게 애플리케이션이 접근하는 것을 허용할 것인지를 묻고, 승인을 받아야 접근할 수 있게 된다.
만약 승인을 하지 않으면, 아래와 같이 접속이 안된다.
사용자가 Photo Library에 접근하는 것을 허용하지 않은 경우 왼쪽과 같이 표시된다.
SavedPhotosAlbum은 카메라로 찍은 사진들이 저정되어 있는 Camera Roll을 바로 접근하도록 해준다.