图片选取器 UIImagePickerController的使用

iphone 中的图片选取器 UIImagePickerController以前没有怎么看,现在看了看,总结下

【一】初始化

UIImagePickerController就是普通的初始化,最重要的就是那个 sourceType 这个属性

UIImagePickerController *pick=[[UIImagePickerController alloc]init];


UIImagePickerControllerSourceTypePhotoLibrary:表示显示所有的照片
UIImagePickerControllerSourceTypeCamera:表示从摄像头选取照片
UIImagePickerControllerSourceTypeSavedPhotosAlbum:表示仅仅从相册中选取照片。

【二】UIImagePickerController的使用

UIImagePickerController有三个代理方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo //ios3之后已经抛弃不再使用
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;


因为第一个在 ios2和 ios3之后都不用了,所以主要用后面的两个,还有就是在切换的时候最新的使用presentViewController这个方法

【三】方法示例

主要的代码是这样的,demo 里面是完整的代码,如果需要可以下载 demo,这里主要说下主要功能

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *button=[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 160, 40)];
    ;
     forState:UIControlStateNormal];
    [self.view addSubview:button];
    ;
    imageview =[[UIImageView alloc]initWithFrame:CGRectMake(100, 150, 200, 200)];
    [self.view addSubview:imageview];
    
    
}
-(void)imagefun
{
   UIActionSheet *action=[[UIActionSheet alloc]initWithTitle:@"选择功能" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"相机" otherButtonTitles:@"相册",nil];
    [action showInView:self.view];
}
//actionsheet 总共有两个功能,相册和相机
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //主要是使用这个controller
    UIImagePickerController *pick=[[UIImagePickerController alloc]init];
    if (buttonIndex==0) {
        NSLog(@"相机");
        //判断相机是否可用,因为模拟机是不可以的
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            
            pick.sourceType=UIImagePickerControllerSourceTypeCamera;//设置 pick 的类型为相机
            pick.allowsEditing=true;//设置是否可以编辑相片涂鸦
            pick.delegate=self;
            [self presentViewController:pick animated:true completion:nil];
        }
        else
        {
            NSLog(@"相机不可用");
        }
    }
    else if (buttonIndex==1)
    {
        NSLog(@"相册");
        //判断相册是否可用
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
            pick.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
            pick.allowsEditing=true;
            pick.delegate=self;
            [self presentViewController:pick animated:true completion:nil];
        }
        else
        {
            NSLog(@"相册不可用");
        }
    }
    else
    {
        NSLog(@"取消");
    }
}
///代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSLog(@"xuanze");
    NSString *type=[info objectForKey:UIImagePickerControllerMediaType];
    //判断选择的是否是图片,这个 public.image和public.movie是固定的字段.
    if ([type isEqualToString:@"public.image"])
    {
        //其实这样就已经实现了设置图片的功能
        UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
//这一步主要是判断当是用相机拍摄的时候,保存到相册
        if (picker.sourceType==UIImagePickerControllerSourceTypeCamera) {
            UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
        }
        [imageview setImage:image];
        //这里再加个写入到本地的方案
        //获取写入的文件夹
        NSString *documents=[NSHomeDirectory() stringByAppendingString:@"/Documents"];
        //也可以用下面这个,区别就是加不加/
        //NSString *documents=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        //将 image 转换为 data
        NSData *data;
        if (UIImagePNGRepresentation(image)) {
            data=UIImagePNGRepresentation(image);
        }
        else
            data=UIImageJPEGRepresentation(image, 1.0);
        NSFileManager *filemanager=[NSFileManager defaultManager];
        //避免覆盖
        static int i=0;
        i++;
        [filemanager createFileAtPath:[documents  stringByAppendingFormat:@"/%d.png",i] contents:data attributes:nil];
        
    }
    //判断选择的是否是视频
    if ([type isEqualToString:@"public.movie"]) {
        
    }
    [picker dismissViewControllerAnimated:false completion:nil];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
     NSLog(@"取消");
    [picker dismissViewControllerAnimated:false completion:nil];
}

【四】demo下载

Github下载:https://github.com/DamonHu/hudongImagePicker

GitOsc下载:http://git.oschina.net/DamonHoo/hudongImagePicker

Last modification:January 1st, 1970 at 08:00 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment