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

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

-- 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];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: