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);
    }
}
Другие вопросы по тегам