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

ios中UIImagePickerController 图片选取器的使用

2012-07-03 09:30 555 查看
1。 定义 类变量:

UIImagePickerController* picker_library_;

2。实现 UIImagePickerControllerDelegate 这个delegate,还需要UINavigationControllerDelegate 这个代理

3。 以模态的方式,显示 图片选取器

picker_library_ = [[UIImagePickerController alloc] init];  
        picker_library_.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
        picker_library_.allowsEditing = YES;  
        picker_camera_.allowsImageEditing=YES;  
        picker_library_.delegate = self;  
        [self presentModalViewController: picker_library_  
                                animated: YES];


其中,sourceType 指定了 几种 图片的来源:

UIImagePickerControllerSourceTypePhotoLibrary:表示显示所有的照片

UIImagePickerControllerSourceTypeCamera:表示从摄像头选取照片

UIImagePickerControllerSourceTypeSavedPhotosAlbum:表示仅仅从相册中选取照片。

allowEditing和allowsImageEditing 设置为YES,表示 允许用户编辑图片,否则,不允许用户编辑。

4。 当用户选择一个图片以后,有可能调用两种不同的函数,根据版本的不同。所以,如果要同时支持高版本和低版本的兼容性,那么就

要处理两种函数。

//3.x 用户选中图片后的回调

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

//2.x 用户选中图片之后的回调

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

两种函数的处理代码如下:

//3.x  用户选中图片后的回调  
    - (void)imagePickerController: (UIImagePickerController *)picker   
    didFinishPickingMediaWithInfo: (NSDictionary *)info  
    {  
        if (picker == picker_camera_)   
        {  
            //如果是 来自照相机的image,那么先保存  
            UIImage* original_image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];  
            UIImageWriteToSavedPhotosAlbum(original_image, self,   
                                           @selector(image:didFinishSavingWithError:contextInfo:),   
                                           nil);  
        }  
          
        //获得编辑过的图片  
        UIImage* image = [info objectForKey: @"UIImagePickerControllerEditedImage"];  
          
          
        [self dismissModalViewControllerAnimated:YES];  
        [picker release];  
    }


//2.x  用户选中图片之后的回调  
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo  
    {  
        NSMutableDictionary * dict= [NSMutableDictionary dictionaryWithDictionary:editingInfo];  
          
        [dict setObject:image forKey:@"UIImagePickerControllerEditedImage"];  
          
        //直接调用3.x的处理函数  
        [self imagePickerController:picker didFinishPickingMediaWithInfo:dict];  
    }


5。 用户取消选择

// 用户选择取消  
    - (void) imagePickerControllerDidCancel: (UIImagePickerController *)picker  
    {  
        [self dismissModalViewControllerAnimated:YES];  
        [picker release];  
    }


6。演示示例

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