Я хочу повернуть UIVIew с AVCaptureVideoPreviewLayer в качестве подслоя.
В UIView появляются две кнопки (одна поворачивает слой предварительного просмотра видео влево, а другая вправо), и когда пользователь нажимает одну из них, каждый раз поворачивает слой предварительного просмотра на 1 градус.
override func viewDidLoad() {
...
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
videoPreviewLayer?.frame = self.view.bounds
videoPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
previewView.layer.addSublayer(videoPreviewLayer!)
}
@objc func rotateRight() {
degrees += 1
// 1st possibility - Scale the UIView that contains the previewLayer for 2x
/*
previewView.transform = CGAffineTransform(scaleX: 2, y: 2)
previewView.transform = CGAffineTransform(rotationAngle: (CGFloat(degrees / 180.0 * .pi)))
previewView.transform = CGAffineTransform.identity
*/
// 2nd possibility - Make bigger the previewLayer so when it's rotate doesn't appear the background color of the UIView
/*
videoPreviewLayer?.frame = CGRect(x: -200, y: -200, width: 800, height: 1200)
videoPreviewLayer?.position = CGPoint(x: view.bounds.midX, y: view.bounds.midY)
videoPreviewLayer?.transform = CATransform3DMakeRotation(CGFloat(degrees / 180.0 * .pi), 0.0, 0.0, 1.0)
*/
// 3rd possibility
/*
videoPreviewLayer?.frame = CGRect(x: -200, y: -200, width: 800, height: 1200)
videoPreviewLayer?.position = CGPoint(x: view.bounds.width * 0.5, y: view.bounds.width * 0.5)
videoPreviewLayer?.transform = CATransform3DMakeRotation(CGFloat(degrees / 180.0 * .pi), 0.0, 0.0, 1.0)
*/
// 4th possibility
UIView.animate(withDuration: 1, animations: {
self.previewView.contentMode = UIViewContentMode.scaleToFill
self.previewView.transform = CGAffineTransform(rotationAngle: CGFloat(self.degrees))
})
}
ТРЕБУЕТСЯ ОКОНЧАТЕЛЬНЫЙ РЕЗУЛЬТАТ Требуется окончательный результат
ФАКТИЧЕСКИЙ РЕЗУЛЬТАТ
Я пробовал 4 разных способа создать это вращение, но все они потерпели неудачу. Я надеюсь, что весь этот код и его результат не заставят вас еще больше запутаться.
Результат второго варианта кода ссылка
Результат третьего варианта кода ссылка