UIImagePickerController学习
2013-02-06 11:39
375 查看
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{
[imagePickertakePicture];
}
-(IBAction)press:(id)sender {
imagePicker= [UIImagePickerController alloc] init];
imagePicker.delegate= self;
imagePicker.mediaTypes= [UIImagePickerControlleravailableMediaTypesForSourceType: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];
[buttonaddTarget:self action:@selector(pick)forControlEvents:UIControlEventTouchUpInside];
[viewaddSubview:button];
CGRectnewFrame = CGRectMake(0.0,436,320,44);
view.frame= newFrame;
imagePicker.cameraOverlayView= view;
[selfpresentModalViewController:imagePickeranimated:YES];
}
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
if([info objectForKey:UIImagePickerControllerMediaType]isEqualToString:(NSString*)kUTTypeImage]) {
UIImage*image = [infoobjectForKey:UIImagePickerControllerOriginalImage];
UIImageWriteToSavedPhotosAlbum(image,self, @selector(image:didFinishSavingWithError:contextInfo:),nil);
} elseif ([info objectForKey:UIImagePickerControllerMediaType]isEqualToString:(NSString*)kUTTypeMovie]) {
NSString*path = [info objectForKey:UIImagePickerControllerMediaURL]path];
UISaveVideoAtPathToSavedPhotosAlbum(path,self, @selector(video:didFinishSavingWithError:contextInfo:),nil);
}
[pickerdismissModalViewControllerAnimated:YES];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController*)picker {
[pickerdismissModalViewControllerAnimated:YES];
}
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{
[imagePickertakePicture];
}
-(IBAction)press:(id)sender {
imagePicker= [UIImagePickerController alloc] init];
imagePicker.delegate= self;
imagePicker.mediaTypes= [UIImagePickerControlleravailableMediaTypesForSourceType: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];
[buttonaddTarget:self action:@selector(pick)forControlEvents:UIControlEventTouchUpInside];
[viewaddSubview:button];
CGRectnewFrame = CGRectMake(0.0,436,320,44);
view.frame= newFrame;
imagePicker.cameraOverlayView= view;
[selfpresentModalViewController:imagePickeranimated:YES];
}
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
if([info objectForKey:UIImagePickerControllerMediaType]isEqualToString:(NSString*)kUTTypeImage]) {
UIImage*image = [infoobjectForKey:UIImagePickerControllerOriginalImage];
UIImageWriteToSavedPhotosAlbum(image,self, @selector(image:didFinishSavingWithError:contextInfo:),nil);
} elseif ([info objectForKey:UIImagePickerControllerMediaType]isEqualToString:(NSString*)kUTTypeMovie]) {
NSString*path = [info objectForKey:UIImagePickerControllerMediaURL]path];
UISaveVideoAtPathToSavedPhotosAlbum(path,self, @selector(video:didFinishSavingWithError:contextInfo:),nil);
}
[pickerdismissModalViewControllerAnimated:YES];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController*)picker {
[pickerdismissModalViewControllerAnimated:YES];
}
UIImagePickerController -- the only sanctioned way to get videos/movies or images/pictures on supported devices 用UIImagePickerController选择、显示图片或视频,主要注意UIImagePickerController几个属性的设置 一:UI 显示样式,显示的格式确定 1:sourceType @property(nonatomic) UIImagePickerControllerSourceType sourceType enum { UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera, UIImagePickerControllerSourceTypeSavedPhotosAlbum }; typedef NSUInteger UIImagePickerControllerSourceType; sourceType用来确定用户界面显示的样式: 共三种格式(模拟器上的效果图) UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera, UIImagePickerControllerSourceTypeSavedPhotosAlbum 为了区分是否支持视频格式,一般要用到下面这个函数,以便确定mediaTypes。 + (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType 2: mediaTypes @property(nonatomic,copy) NSArray *mediaTypes mediaTypes用来确定再picker里显示那些类型的多媒体文件,图片?视频? + (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType 二:选取动作处理 UIImagePickerControllerDelegate 通过代理来完成用户在选中图片,或者choose视频时的处理方式: 共有三个可选的代理方法 – imagePickerController:didFinishPickingMediaWithInfo: – imagePickerControllerDidCancel: – imagePickerController:didFinishPickingImage:editingInfo: Deprecated in iPhone OS 3.0 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info info中包括选取的照片,视频的主要信息 NSString *const UIImagePickerControllerMediaType; 选取的类型 public.image public.movie NSString *const UIImagePickerControllerOriginalImage; 修改前的UIImage object. NSString *const UIImagePickerControllerEditedImage; 修改后的UIImage object. NSString *const UIImagePickerControllerCropRect; 原始图片的尺寸NSValue object containing a CGRect data type NSString *const UIImagePickerControllerMediaURL; 视频在文件系统中 的 NSURL地址 保存视频主要时通过获取其NSURL 然后转换成NSData 实例代码如下: - (void) pickImage: (id) sender { UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; ipc.mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:ipc.sourceType]; } ipc.delegate = self; ipc.allowsImageEditing = NO; [self presentModalViewController:ipc animated:YES]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if ([mediaType isEqualToString:@"public.image"]){ // UIImage *selectedImage = [info objectForKey:UIImagePickerControllerOriginalImage]; UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSLog(@"found an image"); [UIImageJPEGRepresentation(image, 1.0f) writeToFile:[self findUniqueSavePath] atomically:YES]; SETIMAGE(image); CFShow([[NSFileManager defaultManager] directoryContentsAtPath:[NSHomeDirectory() stringByAppendingString:@"/Documents"]]); } else if ([mediaType isEqualToString:@"public.movie"]){ NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; NSLog(@"found a video"); NSData *webData = [NSData dataWithContentsOfURL:videoURL]; //NSData *video = [[NSString alloc] initWithContentsOfURL:videoURL]; [webData writeToFile:[self findUniqueMoviePath] atomically:YES]; CFShow([[NSFileManager defaultManager] directoryContentsAtPath:[NSHomeDirectory() stringByAppendingString:@"/Documents"]]); // NSLog(videoURL); } [picker dismissModalViewControllerAnimated:YES]; } |
相关文章推荐
- OC学习之道:UIImagePickerController的使用,使用UIImagePickerController调用本地摄像头,本地相册
- ios学习笔记——UIImagePickerController
- UIImagePickerController学习
- Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片
- IOS 学习--- UIImagePickerController的使用
- ios开发学习笔记--调用相册或相机(UIImagePickerController)
- IOS学习笔记19—UIImagePickerController(图像选取器)
- iOS学习之——UIImagePickerController从拍照、图库、相册获取图片
- iOS 学习笔记-个人头像获取UIImagePickerController使用
- 1天学习1个类 UIImagePickerController 示例
- iOS摄像头和相册-UIImagePickerController-浅析
- UIImagePickerController控件自带按钮显示中文的办法
- UIImagePickerController 视频录制操作,视频大小,时间长度
- configuring frame size of UIImagePickerController
- UIImagePickerController详解
- 通过UIImagePickerController完成照相和相片的选取
- 使用线程加载UIImagePickerController,解决卡屏问题
- UIImagePickerController实现拍照录像或者选取选择图片和影像(Swift)
- iOS 自定义相机, UIImagePickerController && AVCaptureSession (附微信小视频模仿demo)
- iOS摄像头和相册-UIImagePickerController-浅析