Реализация двойного масштабирования камеры в AVCaptureSession для iOS11 - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть приложение для захвата изображений, построенное на основе AVCapture. Традиционный Pinch Zoom всегда хорошо работал для устройства с одной камерой, но с появлением новых двойных камер в iOS11 приложение не может увеличить масштаб до уровня собственного приложения камеры.

Я взглянул на последнюю документацию, и есть новый метод, названный dualCameraSwitchOverVideoZoomFactor, но я не уверен, как реализовать это вокруг того, что у меня уже есть, так как, кажется, есть необходимость в некоторых дополнительных параметрах для поддержки этого , Документация кажется довольно расплывчатой, и я не видел примеров двойного увеличения камеры, которые бы помогли мне.

Вот код, который реализует текущую функцию масштабирования пинча для одной камеры.

- (IBAction)PinchGesture01:(UIPinchGestureRecognizer *)sender {

    NSLog(@"Pinch Zoom Factor: %f", sender.scale);

    if (self.videoCamera.running) {
        [self.videoCamera zoomPinchGestureRecognizerAction:sender];
    }
}

Это вызывает следующий класс камеры, который масштабирует изображение в слое предварительного просмотра.

- (void) zoomPinchGestureRecognizerAction: (UIPinchGestureRecognizer *) sender {
    static CGFloat initialVideoZoomFactor = 0;

    NSLog(@"Pinch Zoom Activated!");
    // Find the current capture device.
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera
                                                                        mediaType: AVMediaTypeVideo
                                                                         position: self.defaultAVCaptureDevicePosition];
    if (sender.state == UIGestureRecognizerStateBegan) {
        initialVideoZoomFactor = captureDevice.videoZoomFactor;
    } else {
        CGFloat scale = MIN(MAX(1, initialVideoZoomFactor * sender.scale), 4);

        [CATransaction begin];
        [CATransaction setAnimationDuration: 0.01];
        customPreviewLayer.affineTransform = CGAffineTransformMakeScale(scale, scale);
        [CATransaction commit];

        if ([captureDevice lockForConfiguration: nil] == YES) {
            captureDevice.videoZoomFactor = scale;
            [captureDevice unlockForConfiguration];
        }
    }
}

Может ли кто-нибудь помочь мне понять, как изменить класс камеры выше, чтобы иметь возможность использовать функцию двойной камеры в последних iPhone? Заранее благодарим за помощь.

...