1.
呼び出し部の記述
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;//フォトアルバム
if ([UIImagePickerController isSourceTypeAvailable:sourceType]) {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = sourceType;
[self presentModalViewController:picker animated:YES];
}
ソースタイプは3種類ある。
UIImagePickerControllerSourceTypeSavedPhotosAlbum
カメラロールが開く。カメラロール下の画像が選択できる。
UIImagePickerControllerSourceTypePhotoLibrary
Photo Albums が開く。
Photo Albums下には、 Camera Roll, PhotoLibrary, 前回読み込んだiPhoto などのディレクトリがあり、どこかから画像を選択できる。
UIImagePickerControllerSourceTypeCamera
カメラが起動し、撮影ができる。
2.
デレゲートクラスにプロトコル記述。
宣言
@interface XXXX : YYYY {
}
//iOS3.0以降、非推奨になっている。定義しなくても良いだろう
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo;
//画像を選択したときに呼ばれる
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
//キャンセルしたときに呼ばれる
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
@end
定義
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"%@", [info description]);
UIImage *image = (UIImage*)[info objectForKey:UIImagePickerControllerOriginalImage]; //このimageが取得できれば、あとはなんなりと
NSLog(@"%@", [image description]);
[self dismissModalViewControllerAnimated:YES];
}
infoの中身は、画像を選択した場合、画像そのもの。
動画を選択した場合、URL(ファイルパス)が格納されている。
infoの中身を出してみた。
NSLog(@"%@", [info description]);
NSLog(@"mediaType :%@", [info objectForKey:UIImagePickerControllerMediaType]);
NSLog(@"orignImage :%@", [(UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage] description]);
NSLog(@"editedImage :%@", [(UIImage *)[info objectForKey:UIImagePickerControllerEditedImage] description]);
CGRect rect = [(NSValue *)[info objectForKey:UIImagePickerControllerCropRect] CGRectValue];
NSLog(@"rect :(%f,%f,%f,%f)", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
NSLog(@"mediaURL :%@", [info objectForKey:UIImagePickerControllerMediaURL]);
NSLog(@"mediaRefURL :%@", [info objectForKey:UIImagePickerControllerReferenceURL]);
NSLog(@"mediaMetadata:%@", [[info objectForKey:UIImagePickerControllerMediaMetadata] description]);
でも、値が入っていないキーが多い。
値があったのは以下の3つだけだった。
{
UIImagePickerControllerMediaType = "public.image";
UIImagePickerControllerOriginalImage = "";
UIImagePickerControllerReferenceURL = "assets-library://asset/asset.PNG?id=1000000348&ext=PNG";
}
またまたついでに、各キーの定義は以下のように書かれていた。
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaType; // an NSString (UTI, i.e. kUTTypeImage)
UIKIT_EXTERN NSString *const UIImagePickerControllerOriginalImage; // a UIImage
UIKIT_EXTERN NSString *const UIImagePickerControllerEditedImage; // a UIImage
UIKIT_EXTERN NSString *const UIImagePickerControllerCropRect; // an NSValue (CGRect)
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaURL; // an NSURL
UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_1); // an NSURL that references an asset in the AssetsLibrary framework
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaMetadata __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_1); // an NSDictionary containing metadata from a captured photo
PR