|
@@ -14,6 +14,9 @@
|
|
|
|
|
|
|
|
@property (strong, nonatomic) IBOutlet UIScrollView *previewScroll;
|
|
@property (strong, nonatomic) IBOutlet UIScrollView *previewScroll;
|
|
|
@property (strong, nonatomic) IBOutlet UIView *editContainer;
|
|
@property (strong, nonatomic) IBOutlet UIView *editContainer;
|
|
|
|
|
+@property (strong, nonatomic) IBOutlet UIButton *retakeBtn;
|
|
|
|
|
+@property (strong, nonatomic) IBOutlet UIButton *usePhotoBtn;
|
|
|
|
|
+@property (strong, nonatomic) IBOutlet UIView *toolBarView;
|
|
|
|
|
|
|
|
@property (nonatomic,strong) UIImageView *imgView;
|
|
@property (nonatomic,strong) UIImageView *imgView;
|
|
|
|
|
|
|
@@ -26,12 +29,13 @@
|
|
|
// Do any additional setup after loading the view.
|
|
// Do any additional setup after loading the view.
|
|
|
[self.view insertSubview:[UIView new] atIndex:0];
|
|
[self.view insertSubview:[UIView new] atIndex:0];
|
|
|
|
|
|
|
|
- self.editContainer.layer.borderColor = [UIColor whiteColor].CGColor;
|
|
|
|
|
|
|
+ self.editContainer.layer.borderColor = [UIColor lightGrayColor].CGColor;
|
|
|
self.editContainer.layer.borderWidth = 0.5f;
|
|
self.editContainer.layer.borderWidth = 0.5f;
|
|
|
self.editContainer.userInteractionEnabled = NO;
|
|
self.editContainer.userInteractionEnabled = NO;
|
|
|
// UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewPinch:)];
|
|
// UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewPinch:)];
|
|
|
// [self.editContainer addGestureRecognizer:pinch];
|
|
// [self.editContainer addGestureRecognizer:pinch];
|
|
|
|
|
|
|
|
|
|
+
|
|
|
[self.previewScroll addSubview:self.imgView];
|
|
[self.previewScroll addSubview:self.imgView];
|
|
|
}
|
|
}
|
|
|
- (void)setPreImage:(UIImage *)preImage {
|
|
- (void)setPreImage:(UIImage *)preImage {
|
|
@@ -43,10 +47,12 @@
|
|
|
|
|
|
|
|
CGSize size = [self imgViewOriginSize];
|
|
CGSize size = [self imgViewOriginSize];
|
|
|
|
|
|
|
|
- CGRect frame = CGRectMake(0, 70, size.width, size.height);
|
|
|
|
|
|
|
+ CGRect frame = CGRectMake(0, 70, size.width, size.height); // 水平居中
|
|
|
|
|
|
|
|
|
|
+ if (frame.size.height < CGRectGetHeight(self.editContainer.frame)) { // 横屏拍照时,照片在编辑框垂直居中
|
|
|
|
|
+ frame.origin.y = CGRectGetMinY(self.editContainer.frame) + (CGRectGetHeight(self.editContainer.frame) - CGRectGetHeight(frame)) * 0.5;
|
|
|
|
|
+ }
|
|
|
self.imgView.frame = frame;
|
|
self.imgView.frame = frame;
|
|
|
- // CGRectMake(0, 70, CGRectGetWidth(self.previewScroll.frame), CGRectGetHeight(self.previewScroll.frame) - 150)
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)prefersStatusBarHidden {
|
|
- (BOOL)prefersStatusBarHidden {
|
|
@@ -84,8 +90,12 @@
|
|
|
UIImage *img = nil;
|
|
UIImage *img = nil;
|
|
|
|
|
|
|
|
// UIGraphicsBeginImageContext(view.frame.size);
|
|
// UIGraphicsBeginImageContext(view.frame.size);
|
|
|
- UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, [UIScreen mainScreen].scale);
|
|
|
|
|
- [view.layer renderInContext:UIGraphicsGetCurrentContext()];
|
|
|
|
|
|
|
+ UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
|
|
|
|
|
+ if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
|
|
|
|
|
+ [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ [view.layer renderInContext:UIGraphicsGetCurrentContext()];
|
|
|
|
|
+ }
|
|
|
img = UIGraphicsGetImageFromCurrentImageContext();
|
|
img = UIGraphicsGetImageFromCurrentImageContext();
|
|
|
UIGraphicsEndImageContext();
|
|
UIGraphicsEndImageContext();
|
|
|
|
|
|
|
@@ -100,7 +110,7 @@
|
|
|
rect.size.height *= scale;
|
|
rect.size.height *= scale;
|
|
|
rect.size.width *= scale;
|
|
rect.size.width *= scale;
|
|
|
CGImageRef imgRef = CGImageCreateWithImageInRect(image.CGImage, rect);
|
|
CGImageRef imgRef = CGImageCreateWithImageInRect(image.CGImage, rect);
|
|
|
- UIImage *img = [UIImage imageWithCGImage:imgRef scale:0 orientation:3];
|
|
|
|
|
|
|
+ UIImage *img = [UIImage imageWithCGImage:imgRef scale:0 orientation:image.imageOrientation];
|
|
|
CGImageRelease(imgRef);
|
|
CGImageRelease(imgRef);
|
|
|
return img;
|
|
return img;
|
|
|
|
|
|
|
@@ -117,28 +127,12 @@
|
|
|
|
|
|
|
|
- (IBAction)usePhotoClick:(UIButton *)sender {
|
|
- (IBAction)usePhotoClick:(UIButton *)sender {
|
|
|
|
|
|
|
|
- [self testimg];
|
|
|
|
|
- // [self.navigationController popViewControllerAnimated:YES];
|
|
|
|
|
- return;
|
|
|
|
|
-
|
|
|
|
|
if (self.photoHandler) {
|
|
if (self.photoHandler) {
|
|
|
|
|
|
|
|
CGRect imgRect = self.imgView.frame;
|
|
CGRect imgRect = self.imgView.frame;
|
|
|
CGRect editRect = self.editContainer.frame;
|
|
CGRect editRect = self.editContainer.frame;
|
|
|
-// CGRect screenRect = self.view.bounds;
|
|
|
|
|
-// CGFloat screen_img_x = (CGRectGetWidth(imgRect) - CGRectGetWidth(screenRect)) * 0.5;
|
|
|
|
|
-// CGFloat screen_img_y = (CGRectGetHeight(imgRect) - CGRectGetHeight(screenRect)) * 0.5;
|
|
|
|
|
-// CGRect rect = CGRectMake(screen_img_x + editRect.origin.x, screen_img_y + editRect.origin.y, editRect.size.width, editRect.size.height);
|
|
|
|
|
-//
|
|
|
|
|
-// CGFloat scale = self.preImage.size.width / CGRectGetWidth(imgRect);
|
|
|
|
|
-//
|
|
|
|
|
-// CGRect clipImgRect = CGRectMake(rect.origin.x * scale, rect.origin.y * scale, rect.size.width * scale, rect.size.height * scale);
|
|
|
|
|
-
|
|
|
|
|
CGPoint contentOffset = self.previewScroll.contentOffset;
|
|
CGPoint contentOffset = self.previewScroll.contentOffset;
|
|
|
- CGRect clipRect = CGRectMake(editRect.origin.x + contentOffset.x, editRect.origin.y + contentOffset.y - imgRect.origin.y, editRect.size.width, editRect.size.height);
|
|
|
|
|
-
|
|
|
|
|
- CGFloat w = CGImageGetWidth(self.preImage.CGImage);
|
|
|
|
|
- CGFloat h = CGImageGetHeight(self.preImage.CGImage);
|
|
|
|
|
|
|
+ CGRect clipRect = CGRectMake(editRect.origin.x + 1 + contentOffset.x, editRect.origin.y + 1 + contentOffset.y - imgRect.origin.y, editRect.size.width - 2, editRect.size.height -2);
|
|
|
|
|
|
|
|
CGFloat xp = clipRect.origin.x / imgRect.size.width;
|
|
CGFloat xp = clipRect.origin.x / imgRect.size.width;
|
|
|
CGFloat yp = clipRect.origin.y / imgRect.size.height;
|
|
CGFloat yp = clipRect.origin.y / imgRect.size.height;
|
|
@@ -146,64 +140,65 @@
|
|
|
CGFloat hp = clipRect.size.height / imgRect.size.height;
|
|
CGFloat hp = clipRect.size.height / imgRect.size.height;
|
|
|
|
|
|
|
|
CGSize size = self.preImage.size;
|
|
CGSize size = self.preImage.size;
|
|
|
- CGRect clipImgRect = CGRectMake(size.width * xp, size.height * yp, size.width * wp, size.height * hp);
|
|
|
|
|
-// CGRect clipImgRect = CGRectMake(w * xp, h * yp, h * hp, w * wp);
|
|
|
|
|
|
|
+ CGRect clipImgRect = CGRectMake(size.width * xp, size.height * yp, size.width * wp, size.height * hp);
|
|
|
|
|
|
|
|
UIImage *img = [self captureImageWithImage:self.preImage inRect:clipImgRect];
|
|
UIImage *img = [self captureImageWithImage:self.preImage inRect:clipImgRect];
|
|
|
self.photoHandler(img);
|
|
self.photoHandler(img);
|
|
|
}
|
|
}
|
|
|
[self.navigationController popViewControllerAnimated:YES];
|
|
[self.navigationController popViewControllerAnimated:YES];
|
|
|
-}
|
|
|
|
|
--(void) testimg
|
|
|
|
|
-{
|
|
|
|
|
- UIImageOrientation o =self.preImage.imageOrientation;
|
|
|
|
|
-
|
|
|
|
|
- CGRect imgviewRect = self.imgView.frame;
|
|
|
|
|
- CGRect editRect = self.editContainer.frame;
|
|
|
|
|
- CGPoint offset= self.previewScroll.contentOffset;
|
|
|
|
|
-
|
|
|
|
|
- double sscale=self.previewScroll.zoomScale;
|
|
|
|
|
- CGSize contentsize=self.previewScroll.contentSize;
|
|
|
|
|
-
|
|
|
|
|
- CGRect imgScreenRect = CGRectMake(imgviewRect.origin.x-offset.x, imgviewRect.origin.y-offset.y, imgviewRect.size.width, imgviewRect.size.height);
|
|
|
|
|
|
|
|
|
|
- double scale = imgScreenRect.size.width/self.preImage.size.width;//1;//self.previewScroll.zoomScale*(imgviewRect.size.width/self.preImage.size.width);
|
|
|
|
|
- CGRect rectimg = CGRectMake((editRect.origin.x-imgScreenRect.origin.x)/scale, (editRect.origin.y-imgScreenRect.origin.y)/scale, editRect.size.width/scale, editRect.size.height/scale);
|
|
|
|
|
-// UIImage * newimg=[UIImage imageWithCGImage:self.preImage.CGImage scale:1 orientation:UIImageOrientationUp];
|
|
|
|
|
- UIImage * img= [self captureImageWithImage:self.preImage inRect:rectimg];//
|
|
|
|
|
- UIImage* img1 =[self getSubImage:rectimg img:self.preImage];
|
|
|
|
|
- return;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
--(UIImage*)getSubImage:(CGRect)rect img:(UIImage*)img
|
|
|
|
|
-{
|
|
|
|
|
-
|
|
|
|
|
- //将UIImage转换成CGImageRef
|
|
|
|
|
- CGImageRef sourceImageRef = [img CGImage];
|
|
|
|
|
-
|
|
|
|
|
- //按照给定的矩形区域进行剪裁
|
|
|
|
|
- CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
|
|
|
|
|
-
|
|
|
|
|
- //将CGImageRef转换成UIImage
|
|
|
|
|
- UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
|
|
|
|
|
-
|
|
|
|
|
- //返回剪裁后的图片
|
|
|
|
|
- return newImage;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- CGImageRef subImageRef = CGImageCreateWithImageInRect(img.CGImage, rect);
|
|
|
|
|
- UIImage* debugimg = [UIImage imageWithCGImage:subImageRef];
|
|
|
|
|
- CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
|
|
|
|
|
-
|
|
|
|
|
- UIGraphicsBeginImageContext(smallBounds.size);
|
|
|
|
|
- CGContextRef context = UIGraphicsGetCurrentContext();
|
|
|
|
|
- CGContextDrawImage(context, smallBounds, subImageRef);
|
|
|
|
|
- UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
|
|
|
|
|
- UIGraphicsEndImageContext();
|
|
|
|
|
-
|
|
|
|
|
- return smallImage;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+//-(void) testimg
|
|
|
|
|
+//{
|
|
|
|
|
+// UIImageOrientation o =self.preImage.imageOrientation;
|
|
|
|
|
+//
|
|
|
|
|
+// CGRect imgviewRect = self.imgView.frame;
|
|
|
|
|
+// CGRect editRect = self.editContainer.frame;
|
|
|
|
|
+// CGPoint offset= self.previewScroll.contentOffset;
|
|
|
|
|
+//
|
|
|
|
|
+// double sscale=self.previewScroll.zoomScale;
|
|
|
|
|
+// CGSize contentsize=self.previewScroll.contentSize;
|
|
|
|
|
+//
|
|
|
|
|
+// CGRect imgScreenRect = CGRectMake(imgviewRect.origin.x-offset.x, imgviewRect.origin.y-offset.y, imgviewRect.size.width, imgviewRect.size.height);
|
|
|
|
|
+//
|
|
|
|
|
+// double scale = imgScreenRect.size.width/self.preImage.size.width;//1;//self.previewScroll.zoomScale*(imgviewRect.size.width/self.preImage.size.width);
|
|
|
|
|
+// CGRect rectimg = CGRectMake((editRect.origin.x-imgScreenRect.origin.x)/scale, (editRect.origin.y-imgScreenRect.origin.y)/scale, editRect.size.width/scale, editRect.size.height/scale);
|
|
|
|
|
+//// UIImage * newimg=[UIImage imageWithCGImage:self.preImage.CGImage scale:1 orientation:UIImageOrientationUp];
|
|
|
|
|
+// UIImage * img= [self captureImageWithImage:self.preImage inRect:rectimg];//
|
|
|
|
|
+// UIImage* img1 =[self getSubImage:rectimg img:self.preImage];
|
|
|
|
|
+// return;
|
|
|
|
|
+//}
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+//-(UIImage*)getSubImage:(CGRect)rect img:(UIImage*)img
|
|
|
|
|
+//{
|
|
|
|
|
+//
|
|
|
|
|
+// //将UIImage转换成CGImageRef
|
|
|
|
|
+// CGImageRef sourceImageRef = [img CGImage];
|
|
|
|
|
+//
|
|
|
|
|
+// //按照给定的矩形区域进行剪裁
|
|
|
|
|
+// CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
|
|
|
|
|
+//
|
|
|
|
|
+// //将CGImageRef转换成UIImage
|
|
|
|
|
+// UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
|
|
|
|
|
+//
|
|
|
|
|
+// //返回剪裁后的图片
|
|
|
|
|
+// return newImage;
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+// CGImageRef subImageRef = CGImageCreateWithImageInRect(img.CGImage, rect);
|
|
|
|
|
+// UIImage* debugimg = [UIImage imageWithCGImage:subImageRef];
|
|
|
|
|
+// CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
|
|
|
|
|
+//
|
|
|
|
|
+// UIGraphicsBeginImageContext(smallBounds.size);
|
|
|
|
|
+// CGContextRef context = UIGraphicsGetCurrentContext();
|
|
|
|
|
+// CGContextDrawImage(context, smallBounds, subImageRef);
|
|
|
|
|
+// UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
|
|
|
|
|
+// UIGraphicsEndImageContext();
|
|
|
|
|
+//
|
|
|
|
|
+// return smallImage;
|
|
|
|
|
+//}
|
|
|
#pragma mark - UIScrollViewDelegate
|
|
#pragma mark - UIScrollViewDelegate
|
|
|
|
|
|
|
|
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
|
|
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
|
|
@@ -218,46 +213,46 @@
|
|
|
scrollView.contentSize = contentSize;
|
|
scrollView.contentSize = contentSize;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-#pragma mark - pinch
|
|
|
|
|
-
|
|
|
|
|
-- (void)imageViewPinch:(UIPinchGestureRecognizer *)pinch{
|
|
|
|
|
-
|
|
|
|
|
- UIScrollView *scroll = self.previewScroll;
|
|
|
|
|
- UIImageView *imgv = [scroll.subviews firstObject];
|
|
|
|
|
-
|
|
|
|
|
- CGFloat width = scroll.frame.size.width;
|
|
|
|
|
- CGFloat height = scroll.frame.size.height;
|
|
|
|
|
-
|
|
|
|
|
- imgv.transform = CGAffineTransformScale(imgv.transform, pinch.scale, pinch.scale);
|
|
|
|
|
- CGSize size = scroll.contentSize;
|
|
|
|
|
- // size.width = size.width * pinch.scale;
|
|
|
|
|
- // size.height = size.height * pinch.scale;
|
|
|
|
|
- size = imgv.frame.size;// bounds 和 frame 不一致
|
|
|
|
|
- CGSize itemSize = self.editContainer.frame.size;
|
|
|
|
|
- DebugLog(@"size %@",[NSValue valueWithCGSize:size]);
|
|
|
|
|
- if (size.height < itemSize.height || size.width < itemSize.width) { // 禁止缩小得比原图小
|
|
|
|
|
- imgv.transform = CGAffineTransformIdentity;
|
|
|
|
|
- size = imgv.frame.size;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-// if (size.width < width) {
|
|
|
|
|
-// size.width = width;
|
|
|
|
|
-// }
|
|
|
|
|
-// if (size.height < height) {
|
|
|
|
|
-// size.height = height;
|
|
|
|
|
|
|
+//#pragma mark - pinch
|
|
|
|
|
+//
|
|
|
|
|
+//- (void)imageViewPinch:(UIPinchGestureRecognizer *)pinch{
|
|
|
|
|
+//
|
|
|
|
|
+// UIScrollView *scroll = self.previewScroll;
|
|
|
|
|
+// UIImageView *imgv = [scroll.subviews firstObject];
|
|
|
|
|
+//
|
|
|
|
|
+// CGFloat width = scroll.frame.size.width;
|
|
|
|
|
+// CGFloat height = scroll.frame.size.height;
|
|
|
|
|
+//
|
|
|
|
|
+// imgv.transform = CGAffineTransformScale(imgv.transform, pinch.scale, pinch.scale);
|
|
|
|
|
+// CGSize size = scroll.contentSize;
|
|
|
|
|
+// // size.width = size.width * pinch.scale;
|
|
|
|
|
+// // size.height = size.height * pinch.scale;
|
|
|
|
|
+// size = imgv.frame.size;// bounds 和 frame 不一致
|
|
|
|
|
+// CGSize itemSize = self.editContainer.frame.size;
|
|
|
|
|
+// DebugLog(@"size %@",[NSValue valueWithCGSize:size]);
|
|
|
|
|
+// if (size.height < itemSize.height || size.width < itemSize.width) { // 禁止缩小得比原图小
|
|
|
|
|
+// imgv.transform = CGAffineTransformIdentity;
|
|
|
|
|
+// size = imgv.frame.size;
|
|
|
// }
|
|
// }
|
|
|
-
|
|
|
|
|
- scroll.contentSize = size;
|
|
|
|
|
- scroll.contentOffset = CGPointMake((size.width - width) * 0.5, (size.height - height) * 0.5);
|
|
|
|
|
- // 保持在屏幕中心
|
|
|
|
|
- CGPoint offset = scroll.contentOffset;
|
|
|
|
|
- CGFloat x = offset.x + width * 0.5;
|
|
|
|
|
- CGFloat y = offset.y + height * 0.5;
|
|
|
|
|
- imgv.center = CGPointMake(x, y);
|
|
|
|
|
-
|
|
|
|
|
- pinch.scale = 1;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+//// if (size.width < width) {
|
|
|
|
|
+//// size.width = width;
|
|
|
|
|
+//// }
|
|
|
|
|
+//// if (size.height < height) {
|
|
|
|
|
+//// size.height = height;
|
|
|
|
|
+//// }
|
|
|
|
|
+//
|
|
|
|
|
+// scroll.contentSize = size;
|
|
|
|
|
+// scroll.contentOffset = CGPointMake((size.width - width) * 0.5, (size.height - height) * 0.5);
|
|
|
|
|
+// // 保持在屏幕中心
|
|
|
|
|
+// CGPoint offset = scroll.contentOffset;
|
|
|
|
|
+// CGFloat x = offset.x + width * 0.5;
|
|
|
|
|
+// CGFloat y = offset.y + height * 0.5;
|
|
|
|
|
+// imgv.center = CGPointMake(x, y);
|
|
|
|
|
+//
|
|
|
|
|
+// pinch.scale = 1;
|
|
|
|
|
+//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|