UIPinchGestureRecognizer масштабирования AVCaptureConnection; не уменьшать
У меня проблема, у меня есть UIPinchGestureRecognizer, который я использую для масштабирования предварительного просмотра камеры и соответствующего подключения AVCaptureConnection. Нет проблем с увеличением и уменьшением в первый раз, пока вы не поднимите пальцы после того, как вы закончите сжимать для увеличения. Если я попытаюсь ущипнуть внутрь (вернусь к обычному масштабу 1,0), жест не сбросит масштаб предварительного просмотра и AVCaptureConnection ниже, и поэтому предварительный просмотр и AVCaptureConnection останутся на одном и том же размере.
Как я могу исправить это? Оператор if гарантирует, что масштаб не опустится ниже 1,0, поскольку нам не разрешено устанавливать масштаб ниже 1,0 для 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);
}
}
1 ответ
Решил себя методом проб и ошибок:
@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);
}
}