UIImagePickerController之打开图片库和相机选择图片修改头像

长平狐 发布于 2013/12/25 17:17
阅读 189
收藏 0

1、效果图:



2、主要源代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    //获取Documents文件夹目录  
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSString *documentPath = [path objectAtIndex:0];  
    //指定新建文件夹路径  
    NSString *imageDocPath = [documentPath stringByAppendingPathComponent:@"ImageFile"];  
    //创建ImageFile文件夹  
    [[NSFileManager defaultManager] createDirectoryAtPath:imageDocPath withIntermediateDirectories:YES attributes:nil error:nil];  
    //保存图片的路径 
    self.imagePath = [imageDocPath stringByAppendingPathComponent:@"image.png"];
   
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];
    //根据图片路径载入图片
    UIImage *image=[UIImage imageWithContentsOfFile:self.imagePath];
    if (image == nil) {
        //显示默认
        [changeImg setBackgroundImage:[UIImage imageNamed:@"user_photo@2x.png"] forState:UIControlStateNormal];
    }else {
        //显示保存过的
        [changeImg setBackgroundImage:image forState:UIControlStateNormal];
    }
}

- (void)dealloc {
    [imagePath release];
    [changeImg release];
    [super dealloc];
}
- (IBAction)changeImage:(id)sender {
    UIActionSheet *myActionSheet = [[UIActionSheet alloc]                    
                                    initWithTitle:nil
                                    delegate:self
                                    cancelButtonTitle:@"取消"
                                    destructiveButtonTitle:nil
                                    otherButtonTitles: @"从相册选择", @"拍照",nil]; 
    [myActionSheet showInView:self.view];
    [myActionSheet release]; 
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    switch (buttonIndex) {
        case 0:
            //从相册选择
            [self LocalPhoto];
            break;
        case 1:
            //拍照
            [self takePhoto];
            break;
        default:
            break;
    }
}
//从相册选择
-(void)LocalPhoto{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];  
    //资源类型为图片库
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.delegate = self;
    //设置选择后的图片可被编辑
    picker.allowsEditing = YES;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}

//拍照
-(void)takePhoto{
    //资源类型为照相机
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
    //判断是否有相机
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]){
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        //设置拍照后的图片可被编辑
        picker.allowsEditing = YES;
        //资源类型为照相机
        picker.sourceType = sourceType;
        [self presentModalViewController:picker animated:YES];
        [picker release];
    }else {
        NSLog(@"该设备无摄像头");
    }
}
#pragma Delegate method UIImagePickerControllerDelegate  
//图像选取器的委托方法,选完图片后回调该方法  
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{
    
    //当图片不为空时显示图片并保存图片
    if (image != nil) {  
        //图片显示在界面上
        [changeImg setBackgroundImage:image forState:UIControlStateNormal];
        
        //以下是保存文件到沙盒路径下
        //把图片转成NSData类型的数据来保存文件
        NSData *data;
        //判断图片是不是png格式的文件
        if (UIImagePNGRepresentation(image)) {
            //返回为png图像。
            data = UIImagePNGRepresentation(image);
        }else {
            //返回为JPEG图像。
            data = UIImageJPEGRepresentation(image, 1.0);
        }
        //保存
        [[NSFileManager defaultManager] createFileAtPath:self.imagePath contents:data attributes:nil];
        
    }  
    //关闭相册界面
    [picker dismissModalViewControllerAnimated:YES];
}


源码下载地址:http://download.csdn.net/download/rhljiayou/4585011;



原文链接:http://blog.csdn.net/rhljiayou/article/details/8003939
加载中
返回顶部
顶部