iOS-简单拍照/取照片

在iOS中,系统提供了一个拍照视图控制器UIImagePickerController,UIImagePickerController继承于UIViewController,能够直接present出来。spa

在一个按钮事件里调出拍照界面来
3d

- (IBAction)click:(id)sender {orm

    

    self.controller = [[UIImagePickerController alloc]init];继承

    if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) {事件

        self.controller.delegate = self;图片

        self.controller.allowsEditing = YES;ip

        self.controller.sourceType = UIImagePickerControllerSourceTypeCamera;//或者UIImagePickerControllerSourceTypeSavedPhotosAlbumit

        self.controller.cameraDevice = UIImagePickerControllerCameraDeviceRear;io

        [self presentViewController:self.controller animated:YES completion:nil];cli

    } else {

        NSLog(@"camera is not avaliable.");

    }

}

让这个试图控制器遵循UINavigationControllerDelegateUIImagePickerControllerDelegate协议

实现UIImagePickerControllerDelegate协议里的相应方法便可。

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

上面的方法拍完照片和取照片都会走。

例如

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

    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {

        NSLog(@"%@", info);

        //不写dismiss方法的话还在拍照界面

        UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];

        if (image == nil) {

            image = [info objectForKey:UIImagePickerControllerOriginalImage];

        }

        UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

        

//        [self dismissViewControllerAnimated:YES completion:nil];

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

        controller.delegate = self;

        controller.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;//为何到不了照片库啊?

        [self.controller presentViewController:controller animated:YES completion:nil];


    } else if (picker.sourceType == UIImagePickerControllerSourceTypeSavedPhotosAlbum) {

        //image指选中的图片

        UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];

        if (image == nil) {

            image = [info objectForKey:UIImagePickerControllerOriginalImage];

        }

        self.imageView.image = image;

//        [picker dismissViewControllerAnimated:YES completion:nil];

//        [self.controller dismissViewControllerAnimated:YES completion:nil];

      

    } else if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {

        

    }

    

    

}


- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

    if (error == nil) {

        NSLog(@"save successfully");

    } else {

        NSLog(@"saving camera has a problem");

        NSLog(@"%@", [error description]);

    }

}


取消走下面方法:

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;

相关文章
相关标签/搜索