AV Захват и масштабирование PreviewLayer в Swift

У меня есть приложение камеры, которое позволяет пользователю делать снимки и записывать видео. IPhone подключен к медицинскому отоскопу с помощью адаптера, поэтому снимаемое видео очень маленькое (размером примерно в десять центов). Мне нужно иметь возможность увеличивать видео, чтобы заполнить экран, но я не смог понять, как это сделать.

Я нашел этот ответ здесь на SO, который использует ObjC, но не смог успешно перевести его на Swift. Я очень близко, но застреваю. Вот мой код для обработки UIPinchGestureRecgoznier:

    @IBAction func handlePinchGesture(sender: UIPinchGestureRecognizer) {

    var initialVideoZoomFactor: CGFloat = 0.0

    if (sender.state == UIGestureRecognizerState.began) {
        initialVideoZoomFactor = (captureDevice?.videoZoomFactor)!
    } else {
        let scale: CGFloat = min(max(1, initialVideoZoomFactor * sender.scale), 4)

        CATransaction.begin()
        CATransaction.setAnimationDuration(0.01)
        previewLayer?.transform = CGAffineTransform(scaleX: scale, y: scale)
        CATransaction.commit()

        if ((captureDevice?.lockForConfiguration()) != nil) {
            captureDevice?.videoZoomFactor = scale
            captureDevice?.unlockForConfiguration()
        }

    }
}

Эта строка...

previewLayer?.transform = CGAffineTransform(scaleX: scale, y: scale)

... выдает ошибку "Невозможно присвоить значение типа" CGAffineTransform "типу" CGTransform3D ". Я пытаюсь понять это, но мои попытки исправить это были бесполезными.

1 ответ

Разобрался: изменил проблемную строку на:

previewLayer?.setAffineTransform(CGAffineTransform(scaleX: scale, y: scale))
Другие вопросы по тегам