设置preview zoom的方式:
// create a uiview subclass for showing the camera feed
UIView *previewView
= [[UIView alloc] initWithFrame:CGRectMake(0,
0,
320, 430)];
[[self view] addSubview:previewView];
CGRect layerRect =
CGRectMake(0,
0,
320, 430);
[[self avCaptureVideoPreviewLayer] setBounds:layerRect];
[[self previewLayer] setPosition:CGPointMake(CGRectGetMidX(layerRect),
CGRectGetMidY(layerRect))];
// add the video previewview layer to the preview view
[[previewView layer] addSublayer:[self avCaptureVideoPreviewLayer]];
// zoom the preview view using core graphics
[previewView setTransform:CGAffineTransformMakeScale(2.0,
2.0 )];
设置preview zoom的方式:
- (void)handlePinchGesture:(UIPinchGestureRecognizer
*)gestureRecognizer {
if([gestureRecognizer state]
== UIGestureRecognizerStateBegan)
{
// Reset the last scale, necessary if there are multiple objects with different scales
lastScale = [gestureRecognizer scale];
}
if ([gestureRecognizer state]
== UIGestureRecognizerStateBegan
||
[gestureRecognizer state]
== UIGestureRecognizerStateChanged)
{
CGFloat currentScale
= [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"]
floatValue];
// Constants to adjust the max/min values of zoom
const CGFloat kMaxScale
= 2.0;
const CGFloat kMinScale
= 1.0;
CGFloat newScale
= 1
- (lastScale
- [gestureRecognizer scale]);
newScale = MIN(newScale, kMaxScale
/ currentScale);
newScale = MAX(newScale, kMinScale
/ currentScale);
CGAffineTransform transform
= CGAffineTransformScale([[gestureRecognizer view] transform],
newScale, newScale);
[gestureRecognizer view].transform
= transform;
lastScale = [gestureRecognizer scale]; // Store the previous scale factor
for the next pinch gesture call
}
}
图片后处理:
if
(cameraZoom >
1.0)
{
// save the images original size
CGSize orgSize =
[image size];
// resize the image to the zoom scale
image = [image resizedImage:CGSizeMake(image.size.width
* cameraZoom, image.size.height
*cameraZoom) interpolationQuality:kCGInterpolationNone];
// now calculate the offset x and offset y
CGFloat offsetX
= ( image.size.width
/ 2
) -
(orgSize.width
/2)
;
CGFloat offsetY
= ( image.size.height
/ 2
) -
(orgSize.height
/2);
// crop the image from the offset position to the original width and height
image = [image croppedImage:CGRectMake(offsetX,
offsetY, orgSize.width, orgSize.height)];
}
UIButton *imgBtn
= (UIButton
*)[self.view viewWithTag:500];
[imgBtn setImage:image forState:UIControlStateNormal];
}