UIPinchGestureRecognizer zoom AVCaptureConnection; no escalar

Tengo un problema, tengo un UIPinchGestureRecognizer que utilizo para escalar la vista previa de mi camera y la input AVCaptureConnection respectiva. No hay problema en acercar y alejar el zoom la primera vez hasta que levantes los dedos después de que haya terminado de pellizcar para hacer zoom. Si trato de pellizcar hacia dentro (volviendo a escalar a la escala 1.0 normal), el gesto no restablecerá la vista previa y AVCaptureConnection escalará más bajo, por lo que la vista previa y AVCaptureConnection permanecerán en el mismo tamaño.

¿Cómo podría arreglar esto? La statement if se asegura de que la escala no sea inferior a 1.0, ya que no podemos establecer una escala inferior a 1.0 para AVCaptureConnection.

- (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); } } 

Me resolví a través de testing y error:

 @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); } }