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))