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上面作为展示。
有所帮助的朋友麻烦点赞谢谢,继续努力💪💪💪
本人个人微信公众号地址(喜欢记得关注😯)
辛小二个人微信公众号地址
网友评论