2016-03-07 74 views
2

如何应用放大和缩小摄像头视图使用UIPinchGestureRecognizer和AVCaptureDevice。 它没有正确缩放。
缩小是不是在我下面的代码工作:使用Objective-C放大和缩小摄像机视图?

AVCaptureDevice *device =[AVCaptureDevice defaultDeviceWithMediaType: 
                 AVMediaTypeVideo]; 
AVCaptureDeviceFormat *format = device.activeFormat; 
CGFloat maxZoomFactor = format.videoMaxZoomFactor; 
const CGFloat pinchVelocityDividerFactor = 2.0f; 

if (pinchRecognizer.state == UIGestureRecognizerStateChanged || pinchRecognizer.state ==UIGestureRecognizerStateBegan) 
{ 
    NSError *error = nil; 
     if ([device lockForConfiguration:&error]) 
     { 
     CGFloat desiredZoomFactor = device.videoZoomFactor + 
      atan2f(pinchRecognizer.velocity, pinchVelocityDividerFactor); 

      // Check if desiredZoomFactor fits required range from 1.0 
            //to activeFormat.videoMaxZoomFactor 
      if((1.0 <= pinchRecognizer.scale) && (2.5 >= pinchRecognizer.scale)) 
      device.videoZoomFactor = pinchRecognizer.scale * pinchRecognizer.scale; 

     [device unlockForConfiguration]; 
     } 
     else 
     { 
     NSLog(@"error: %@", error); 
     } 
} 
} 

请帮助任何人。
感谢

+0

看看http://stackoverflow.com/questions/23245127/uipinchgesturerecognizer-make-zoom-in-location-of-fingers-not -only-center – fabersky

+0

但是,他们已经给出了图片或视图我想使用设备VideoZoom因子 – kishor

+0

@kishor你在哪里添加了pinchgesture?我必须实现缩放,但不知道应该在哪里添加捏手势? – Dalvik

回答

2

// PinchGesture识别器法定义

- (void)handlePinchZoom:(UIPinchGestureRecognizer *)pinchRecognizer 
{ 
    AVCaptureDevice *device =[AVCaptureDevicedefaultDeviceWithMediaType: 
                 AVMediaTypeVideo]; 
    AVCaptureDeviceFormat *format = device.activeFormat; 
    CGFloat maxZoomFactor = format.videoMaxZoomFactor; 
    NSArray *formats = device.formats; 
    const CGFloat pinchVelocityDividerFactor = 2.0f; 
    if (pinchRecognizer.state == UIGestureRecognizerStateChanged || pinchRecognizer.state ==UIGestureRecognizerStateBegan) 
    { 
     NSError *error = nil; 
     if ([device lockForConfiguration:&error]) 
     { 
      CGFloat desiredZoomFactor = device.videoZoomFactor + 
      atan2f(pinchRecognizer.velocity, pinchVelocityDividerFactor); 

      device.videoZoomFactor = MAX(1.0, MIN(desiredZoomFactor, 
              device.activeFormat.videoMaxZoomFactor)); 
      [device unlockForConfiguration]; 
     } 
     else 
     { 
     NSLog(@"error: %@", error); 
     } 
    } 
    }