3

我有一个问题,我有一个UIPinchGestureRecognizer,我用它来缩放我的相机预览和相应的AVCaptureConnection进出。第一次放大和缩小时没有任何问题,直到完成缩放操作后松开手指。如果我尝试向内捏(缩放回正常的1.0比例),手势不会重置预览,并且AVCaptureConnection缩小,因此预览和AVCaptureConnection保持相同的大小。UIPinchGestureRecognizer缩放AVCaptureConnection;不缩小

我怎么能解决这个问题? if语句确保缩放比例不低于1.0,因为我们不允许将AVCaptureConnection的比例设置为低于1.0。

- (void)zoomPreview:(UIPinchGestureRecognizer *)recognizer 
{ 
    CGFloat scale = recognizer.scale; 

    NSLog(@"Scale: %f",scale); 

    if (scale >= 1.0) 
    { 
     [[self.stillImageOutput.connections objectAtIndex:0] setVideoScaleAndCropFactor:scale]; 

     self.previewView.transform = CGAffineTransformMakeScale(scale, scale); 
    } 
} 
+0

我已经回答了类似的问题在这里: http://stackoverflow.com/questions/24397584/implementing-zoom-feature在avcamviewcontroller/24398752#24398752 – joelg

+0

哦哇我没有看到这个评论,我必须看看这个 – klcjr89

+0

似乎没有帮助我 – klcjr89

回答

0

解决自己通过试验和错误:

@property (nonatomic, assign) CGFloat lastScale; 
@property (nonatomic, assign) CGFloat currentScale; 

- (void)zoomPreview:(UIPinchGestureRecognizer *)recognizer 
{ 
    self.currentScale += recognizer.scale - self.lastScale; 
    self.lastScale = recognizer.scale; 

    if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled) 
    { 
     self.lastScale = 1.0; 
    } 

    if (self.currentScale < 1.0) 
    { 
     self.currentScale = 1.0; 
    } 

    if (self.currentScale > 5.0) 
    { 
     self.currentScale = 5.0; 
    } 

    if (self.currentScale >= 1.0 && self.currentScale <= 5.0) 
    { 
     [[self.stillImageOutput.connections objectAtIndex:0]setVideoScaleAndCropFactor:self.currentScale]; 

     self.previewView.transform = CGAffineTransformMakeScale(self.currentScale, self.currentScale); 
    } 
}