KKCutTool.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //
  2. // KKCutTool.m
  3. // WWImageEdit
  4. //
  5. // Created by 邬维 on 2017/1/16.
  6. // Copyright © 2017年 kook. All rights reserved.
  7. //
  8. #import "KKCutTool.h"
  9. #import "KKCutGridView.h"
  10. @implementation KKCutTool{
  11. //裁剪view
  12. KKCutGridView *_gridView;
  13. //底部菜单
  14. UIView *_menuContainer;
  15. }
  16. #pragma -mark KKImageToolProtocol
  17. + (UIImage*)defaultIconImage{
  18. return [UIImage imageNamed:@"ToolClipping"];
  19. }
  20. + (NSString*)defaultTitle{
  21. return Localized(@"JX_ImageEditCut");
  22. }
  23. + (NSUInteger)orderNum{
  24. return KKToolIndexNumberFifth;
  25. }
  26. #pragma mark- implementation
  27. - (void)setup{
  28. [self.editor fixZoomScaleWithAnimated:YES];
  29. _gridView = [[KKCutGridView alloc] initWithSuperview:self.editor.imageView.superview frame:self.editor.imageView.frame];
  30. _gridView.backgroundColor = [UIColor clearColor];
  31. _gridView.bgColor = [[UIColor blackColor] colorWithAlphaComponent:0.8];
  32. _gridView.gridColor = [[UIColor redColor] colorWithAlphaComponent:0.8];
  33. _gridView.clipsToBounds = NO;
  34. _menuContainer = [[UIView alloc] initWithFrame:self.editor.menuView.frame];
  35. _menuContainer.backgroundColor = self.editor.menuView.backgroundColor;
  36. [self.editor.view addSubview:_menuContainer];
  37. _menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuContainer.top);
  38. [UIView animateWithDuration:kImageToolAnimationDuration
  39. animations:^{
  40. _menuContainer.transform = CGAffineTransformIdentity;
  41. }];
  42. }
  43. - (void)cleanup{
  44. [self.editor resetZoomScaleWithAnimated:YES];
  45. [_gridView removeFromSuperview];
  46. [UIView animateWithDuration:kImageToolAnimationDuration
  47. animations:^{
  48. _menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuContainer.top);
  49. }
  50. completion:^(BOOL finished) {
  51. [_menuContainer removeFromSuperview];
  52. }];
  53. }
  54. -(void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock{
  55. CGFloat zoomScale = self.editor.imageView.width / self.editor.imageView.image.size.width;
  56. CGRect rct = _gridView.clippingRect;
  57. rct.size.width /= zoomScale;
  58. rct.size.height /= zoomScale;
  59. rct.origin.x /= zoomScale;
  60. rct.origin.y /= zoomScale;
  61. CGPoint origin = CGPointMake(-rct.origin.x, -rct.origin.y);
  62. UIGraphicsBeginImageContextWithOptions(rct.size, NO, self.editor.imageView.image.scale);
  63. [self.editor.imageView.image drawAtPoint:origin];
  64. UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
  65. UIGraphicsEndImageContext();
  66. completionBlock(img, nil, nil);
  67. }
  68. @end