您的位置:首页 > 产品设计 > UI/UE

UIImagePickerControllerDelegate 实现选择相册图片和拍照得到图片

2014-01-06 16:39 501 查看
UIImagePickerController概述:

UIImagePickerController 类是获取选择图片和视频的用户接口。我们可以用这个controller选择我们所需要的图片和视频。对于这个类来说比较特殊,我们不能够任意定制,也不可以继承生成子类。

我们在用UIImagePickerController类的时候,只需要调用用代码实现其在什么位置显示和开始,当然我们之后可以选择所需的图片和影片,或者也可以不选择点击取消即可。

但是在我们调用接口之前,我们需要确认:

一:当前设备是否支持使用UIImagePickerController,这个时候我们需要调用isSourceTypeAvailable:方法判断。

二:查看符合的媒体类型(图片或者视频),这个时候我们调用availableMediaTypesForSourceType: 方法判断。

同时使用UIImagePickerController时,我们需要UIImagePickerControllerDelegate协议代理实现一些特定时间特定的动作。在调用摄像头的时候我们可以选择使用闪光灯,但是默认条件下对视频有10分钟的限制,需要用videoMaximumDuration属性更改默认时间,

三:之后我们设定界面媒体的属性

1:sourceType //从哪选取媒体

enum {

UIImagePickerControllerSourceTypePhotoLibrary,

UIImagePickerControllerSourceTypeCamera,

UIImagePickerControllerSourceTypeSavedPhotosAlbum

};

typedef NSUInteger UIImagePickerControllerSourceType;

2: mediaTypes

mediaTypes用来确定再picker里显示那些类型的多媒体文件,图片?视频?

+ (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType

一共有三个可选的代理方法UIImagePickerControllerDelegate

– imagePickerController:didFinishPickingMediaWithInfo:

– imagePickerControllerDidCancel:

– imagePickerController:didFinishPickingImage:editingInfo:

-(void) pick{

[imagePicker takePicture];

}

- (IBAction)press:(id)sender {

imagePicker = [UIImagePickerController alloc] init];

imagePicker.delegate = self;

imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

imagePicker.showsCameraControls = NO;

UIView* view = [UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

view.backgroundColor = [UIColor redColor];

UIButton* button = [UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];

button.backgroundColor = [UIColor blueColor];

[button addTarget:self action:@selector(pick) forControlEvents:UIControlEventTouchUpInside];

[view addSubview:button];

CGRect newFrame = CGRectMake(0.0,436,320,44);

view.frame = newFrame;

imagePicker.cameraOverlayView = view;

[self presentModalViewController:imagePicker animated:YES];

}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

if ([info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeImage]) {

UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];

UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

}else if ([info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeMovie])
{

NSString* path = [info objectForKey:UIImagePickerControllerMediaURL] path];

UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);

}

[picker dismissModalViewControllerAnimated:YES];

}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

[picker dismissModalViewControllerAnimated:YES];

}

//以下是我的注释
PS:如果自己实现协议中的方法
例如:
-(void)imagePickerControllerDidCancel:(UIImagePickerController
*)picker;


一定要记得调用
[picker
dismissModalViewControllerAnimated:YES];


否则view是不会切换回来的

UIImage *image = [info
objectForKey:UIImagePickerControllerOriginalImage];

根据文档,这是个字符常量....开始的时候当做字符来用@"UIImagePickerControllerOriginalImage"
貌似也没有问题....不解中....

Editing Information Keys
Keys for the editing information dictionary passed to the delegate.

NSString *const UIImagePickerControllerMediaType;
NSString *const UIImagePickerControllerOriginalImage;
NSString *const UIImagePickerControllerEditedImage;
NSString *const UIImagePickerControllerCropRect;
NSString *const UIImagePickerControllerMediaURL;
NSString *const UIImagePickerControllerReferenceURL;
NSString *const UIImagePickerControllerMediaMetadata;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: