iOS-简单拍照/取照片

我们两清 提交于 2020-03-13 20:34:21

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

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

- (IBAction)click:(id)sender {

    

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

    if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) {

        self.controller.delegate = self;

        self.controller.allowsEditing = YES;

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

        self.controller.cameraDevice = UIImagePickerControllerCameraDeviceRear;

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

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!