2010年2月17日水曜日

UIImagePickerControllerで動画の選択

スズキです。

"iPhone 3GS"も手に入り、早速、よくある手法で、
アプリから、"Photo Albums"の動画を選択しようとしたら、
選択肢に動画が現れず、静止画のみって状態になってしまいました。

で、いろいろ検索したところ、下記にやり方がありました。
http://sol3.typepad.com/tagalong_developer_journa/2009/07/recorded-video-from-iphone-3gs-.html

ポイントを簡単にまとめると、

(1) 以下のようにUIImagePickerControllerのmediaTypesをセットする。
self.imagePicker.mediaTypes = [UIImagePickerController
 availableMediaTypesForSourceType:self.imagePicker.sourceType];

(2) 画像を選択した時の処理は下記メソッドの実装で行う。
-(void)imagePickerController:(UIImagePickerController*)imagePicker
didFinishPickingMediaWithInfo:(NSDictionary*)info {}

といった感じでしょうか?

また、実行時の上記メソッドのinfo(NSDictionary)の中身は次のようになっていました。

【静止画を選択した場合】
UIImagePickerControllerMediaType = "public.image";
UIImagePickerControllerOriginalImage = <UIImage: 0x16ca30>;

【動画を選択した場合】
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL =
file://localhost/private/var/mobile/Applications/7D25D208-A9C4-477F-A83E-28880EFCB4F5/tmp//trim.VP1OPQ.MOV;

つまり、動画/静止画の区別はUIImagePickerControllerMediaTypeででき、
動画の情報はURLで提供されるってことになります。

最後に関係ソースの全体です。("Google Code"にコミットするか...)

--------【Test01ViewController.h】--------

#import <UIKit/UIKit.h>

@interface Test01ViewController : UIViewController
<UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
 IBOutlet UIButton *button;
 UIImagePickerController *imagePicker;
}

@property (nonatomic, retain) UIImagePickerController *imagePicker;

- (IBAction)choose;

@end

--------【Test01ViewController.m】--------

#import "Test01ViewController.h"

@implementation Test01ViewController

@synthesize imagePicker;

// 画面表示時の処理
- (void)viewDidLoad
{
 [super viewDidLoad];
 NSLog(@"viewDidLoad");
 self.imagePicker = [[UIImagePickerController alloc] init];
 self.imagePicker.allowsEditing = NO;
 self.imagePicker.delegate = self;
 self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
 self.imagePicker.mediaTypes = [UIImagePickerController
  availableMediaTypesForSourceType:self.imagePicker.sourceType];
}

// 「Choose!」を押した時の処理
- (IBAction)choose
{
 NSLog(@"choose");
 [self presentModalViewController:self.imagePicker animated:YES];
}

// 画像を選択した時の処理
-(void)imagePickerController:(UIImagePickerController*)imagePicker
didFinishPickingMediaWithInfo:(NSDictionary*)info
{
 NSLog(@"imagePickerController");
 NSLog(@"info %@", [info description]);
 [self dismissModalViewControllerAnimated:YES];
}

// 画像の選択をキャンセルした時の処理
-(void)imagePickerControllerDidCancel:(UIImagePickerController*)imagePicker
{
 NSLog(@"imagePickerControllerDidCancel");
 [self dismissModalViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];
}

- (void)viewDidUnload
{
 NSLog(@"viewDidUnLoad");
}

- (void)dealloc
{
 [super dealloc];
}

@end

--------
http://www.suz-lab.com

0 コメント: