美文网首页
IOS之调用系统相册API实现剪切功能

IOS之调用系统相册API实现剪切功能

作者: 辛小二 | 来源:发表于2017-05-02 15:15 被阅读881次

DEMO地址

目录功能

一、调用系统相册和相机的方法
二、实现更改系统API文字(cancel 等文字的样式)
三、对图片进行剪切

一、调用系统相册和相机的方法

首先你需要添加照相机权限添加方法如下

Privacy - Camera Usage Description     cameraDesciption
Privacy - Photo Library Usage Description   打开相册好嘛
访问相机权限

设置权限之后,你就需要调用系统的API方法。调用相机的枚举我们会发现,分别有三种类型方式。

enum {
   UIImagePickerControllerSourceTypePhotoLibrary ,//来自图库
   UIImagePickerControllerSourceTypeCamera ,//来自相机
   UIImagePickerControllerSourceTypeSavedPhotosAlbum //来自相册
};

那我们可以通过如下的方式进行判断

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        NSLog(@"支持相机");
    }
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
    {
        NSLog(@"支持图库");
    }
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    {
        NSLog(@"支持相片库");
    }

当然我们在枚举判断之前还是需要判断当前app相机授权是否打开了。在9.0之后的版本判断相机权限是否打开进行了更改,更改代码如下。

PHAuthorizationStatus photoAuthorStatus = [PHPhotoLibrary authorizationStatus];
    switch (photoAuthorStatus) {
        case PHAuthorizationStatusAuthorized:
            NSLog(@"Authorized");/*授权*/
            break;
        case PHAuthorizationStatusDenied:
            NSLog(@"Denied");/*拒绝*/
            break;
        case PHAuthorizationStatusNotDetermined:
            NSLog(@"not Determined");/*不确定*/
            break;
        case PHAuthorizationStatusRestricted:
            NSLog(@"Restricted");/*受限制的*/
            break;
        default:
            break;
    }

看到上面的枚举之后枚举之后,我们开始判断在已经授权的情况下,我们如何判断当前运行模式是否属于真机测试环境下,因为我们常常会遇到模拟器下调用系统拍照项目崩溃的现象,那么我们判断如下。

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        if (status == PHAuthorizationStatusAuthorized) {
            NSLog(@"Authorized");/*授权*/
            
            if (TARGET_IPHONE_SIMULATOR) {
                NSLog(@"模拟器");
                return ;
            }
            
            if (TARGET_OS_IPHONE) {
                NSLog(@"真机");
                UIImagePickerController *pc = [[UIImagePickerController alloc]init];
                pc.delegate = self;
                [pc setSourceType:UIImagePickerControllerSourceTypeCamera];
                [pc setModalPresentationStyle:UIModalPresentationFullScreen];
                [pc setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
                [pc setAllowsEditing:YES];
                [self presentViewController:pc animated:YES completion:nil];
                return ;
            }
            
        }else{
            NSLog(@"Denied or Restricted");/*限制*/
        }
    }];

实现代理方法

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    NSLog(@"%s",__func__);
    [self dismissViewControllerAnimated:YES completion:nil];
    UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
    NSLog(@"%@",NSStringFromCGSize(image.size));
    /*当返回时候进行赋值 赋值可以经过剪切之后再赋值 还可以不剪切就赋值 剪切用上面这句 不剪切用下面那句*/
    UIImage *image2 = [UIImage imagewithImage:image];
    /*不剪切直接赋值*/
//    UIImage *image2 = image;
    self.imageview.image = image2;
}

实现剪切方式

-(void)drawRect:(CGRect)rect
{
    CGContextRef ref = UIGraphicsGetCurrentContext();
    CGContextAddRect(ref, rect);
    CGContextAddArc(ref, [UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2, arcWitch, 0, M_PI*2, NO);
    [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]setFill];
    /*设置挡板的颜色*/
    CGContextDrawPath(ref, kCGPathEOFill);
    
    CGContextAddArc(ref, [UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2, arcWitch, 0, M_PI*2, NO);
    /*圆外圈线的颜色*/
    [[UIColor blueColor]setStroke];
    CGContextStrokePath(ref);
}

也就是在选中图片之后,点击确定之后开始对图片进行剪切,再将剪切之后的照片赋值到imageView上面作为展示。
有所帮助的朋友麻烦点赞谢谢,继续努力💪💪💪

本人个人微信公众号地址(喜欢记得关注😯)


辛小二个人微信公众号地址

相关文章

网友评论

      本文标题:IOS之调用系统相册API实现剪切功能

      本文链接:https://www.haomeiwen.com/subject/cgkctxtx.html