HKClipperHelper.m 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // HKClipperHelper.m
  3. // HKClipperDemo
  4. //
  5. // Created by hukaiyin on 2017/8/8.
  6. // Copyright © 2017年 hukaiyin. All rights reserved.
  7. //
  8. #import "HKClipperHelper.h"
  9. @interface HKClipperHelper()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
  10. @end
  11. @implementation HKClipperHelper
  12. + (instancetype)shareManager {
  13. static HKClipperHelper *instance = nil;
  14. static dispatch_once_t predicate;
  15. dispatch_once(&predicate, ^{
  16. instance = [[self alloc]init];
  17. });
  18. return instance;
  19. }
  20. #pragma mark - UIImagePickerControllerDelegate
  21. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
  22. if (!self.isSystemType) {
  23. //自定义裁剪方式
  24. UIImage*image = [self turnImageWithInfo:info];
  25. HKImageClipperViewController *clipperVC = [[HKImageClipperViewController alloc]initWithBaseImg:image
  26. resultImgSize:_clippedImgSize clipperType:self.clipperType];
  27. __weak typeof(self)weakSelf = self;
  28. clipperVC.cancelClippedHandler = ^(){
  29. [picker dismissViewControllerAnimated:YES completion:nil];
  30. };
  31. clipperVC.successClippedHandler = ^(UIImage *clippedImage){
  32. __strong typeof(self)strongSelf = weakSelf;
  33. !strongSelf.clippedImageHandler?:strongSelf.clippedImageHandler(clippedImage);
  34. [picker dismissViewControllerAnimated:YES completion:nil];
  35. };
  36. [picker pushViewController:clipperVC animated:YES];
  37. } else {
  38. //系统方式,区分是否需要裁剪
  39. NSString *imgKey;
  40. UIImage *image;
  41. if (!self.systemEditing) {
  42. imgKey = UIImagePickerControllerOriginalImage;
  43. image = [self turnImageWithInfo:info];
  44. } else {
  45. imgKey = UIImagePickerControllerEditedImage;
  46. image=[info objectForKey:imgKey];
  47. }
  48. UIImage *clippedImage = [info objectForKey:imgKey];
  49. !_clippedImageHandler?:_clippedImageHandler(clippedImage);
  50. [picker dismissViewControllerAnimated:YES completion:nil];
  51. }
  52. }
  53. - (UIImage *)turnImageWithInfo:(NSDictionary<NSString *,id> *)info {
  54. UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
  55. //类型为 UIImagePickerControllerOriginalImage 时调整图片角度
  56. NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
  57. if ([type isEqualToString:@"public.image"]) {
  58. UIImageOrientation imageOrientation=image.imageOrientation;
  59. if(imageOrientation!=UIImageOrientationUp) {
  60. // 原始图片可以根据照相时的角度来显示,但 UIImage无法判定,于是出现获取的图片会向左转90度的现象。
  61. UIGraphicsBeginImageContext(image.size);
  62. [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
  63. image = UIGraphicsGetImageFromCurrentImageContext();
  64. UIGraphicsEndImageContext();
  65. }
  66. }
  67. return image;
  68. }
  69. - (void)photoWithSourceType:(UIImagePickerControllerSourceType)type{
  70. UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
  71. imagePicker.delegate = self;
  72. imagePicker.sourceType = type;
  73. imagePicker.allowsEditing = self.systemEditing;
  74. imagePicker.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
  75. [self.nav presentViewController:imagePicker animated:YES completion:nil];
  76. }
  77. @end