iOS 系统相机拍照后图片无法拖拽问题的解决

问题:使用系统相机拍照,并允许编辑allowsEditing = YES,但在图片编辑界面只可以对图片进行缩放却无法拖拽。

大牛给出了解决方案,我用着是好使👇🏻👇🏻👇🏻
https://stackoverflow.com/questions/12630155/uiimagepicker-allowsediting-stuck-in-center/53440254#53440254

 创建如下的分类文件,并导入到所需要的页面。

// .h文件
#import @interface UIImagePickerController (GJImagePickerVC)
- (void)fixCannotMoveEditingBox;
@end
#import "UIImagePickerController+GJImagePickerVC.h"@implementation UIImagePickerController (GJImagePickerVC)- (UIScrollView *)findScrollViewFrom:(UIView *)view {if ([view isKindOfClass:UIScrollView.class]) {return (UIScrollView *)view;}for (UIView *tempView in view.subviews) {UIView *view = [self findScrollViewFrom:tempView];if ([view isKindOfClass:UIScrollView.class]) {return (UIScrollView *)view;}}return nil;
}- (UIView *)findCropViewFrom:(UIView *)view {CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;CGSize size = view.bounds.size;if (screenWidth == size.height && screenWidth == size.height) {return view;}for (UIView *tempView in view.subviews) {UIView *view = [self findCropViewFrom:tempView];if (view) return view;}return nil;
}- (void)fixCannotMoveEditingBox {UIView *cropView = [self findCropViewFrom:self.view];UIScrollView *scrollView = [self findScrollViewFrom:self.view];if (cropView && scrollView && scrollView.contentOffset.y == 0) {CGFloat top = CGRectGetMinY(cropView.frame);CGFloat bottom = scrollView.frame.size.height - cropView.frame.size.height - top;scrollView.contentInset = UIEdgeInsetsMake(top, 0, bottom, 0);CGFloat offset = 0;if (scrollView.contentSize.height > scrollView.contentSize.width) {offset = 0.5 * (scrollView.contentSize.height - scrollView.contentSize.width);}scrollView.contentOffset = CGPointMake(0, -top + offset);}dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self fixCannotMoveEditingBox];});
}@end
// 使用
UIImagePickerController *pickerVC = [UIImagePickerController new];
[pickerVC fixCannotMoveEditingBox];
// 其他配置
// ...
[self presentViewController:pickerVC animated:YES completion:nil];

该方法是对系统自带的BUG做出适配性调整。但由于iOS12系统的系统拍照的层级结构并不一致,所以该方法不适用于iOS12系统。

如果想彻底解决所有问题,只能自己编写编辑相片页面或引入第三方框架,来实现无限制的拍照裁剪功能。例如下方代码所示。

#pragma UIImagePickerController Delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{UIImage *portraitImg = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; YYImageClipViewController *imgClipVC = [[YYImageClipViewController alloc] initWithImage:portraitImg cropFrame:CGRectMake(0, 100.0f, self.view.frame.size.width, self.view.frame.size.width) limitScaleRatio:3.0]; imgClipVC.delegate = self;[picker pushViewController:imgClipVC animated:NO];
}- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{ [picker dismissViewControllerAnimated:YES completion:nil];
}
- (void)imageClip:(YYImageClipViewController *)clipViewController didFinished:(UIImage *)editedImage 
{ //保存图片NSString *imageFilePath = [UIImage saveImage:editedImage]; //上传到自家服务器 [self upImageFilePath:imageFilePath]; //隐藏裁剪界面 [clipViewController dismissViewControllerAnimated:YES completion:nil];
}- (void)imageClipDidCancel:(YYImageClipViewController *)clipViewController
{[clipViewController dismissViewControllerAnimated:YES completion:nil];
}

 网上有很多这类框架,这里就不一一列出了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部