Ich möchte ein UIVIew mit einem AVCaptureVideoPreviewLayer als Sublayer drehen.Rotierende UIView mit AVCaptureVideoPreviewLayer als Sublayer
In der UIView erscheinen zwei Schaltflächen (die Videovorschauebene wird nach links und die andere nach rechts gedreht) und wenn der Benutzer auf eine davon tippt, wird die Vorschauebene jedes Mal um 1 Grad gedreht.
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))
})
}
ENDERGEBNIS ERFORDERLICH Final result required
tatsächliches Ergebnis
Ich versuche habe 4 verschiedene Möglichkeiten, um diese Drehung zu schaffen, aber alle von ihnen nicht gelungen waren. Ich hoffe, dass all dieser Code und sein Ergebnis Sie nicht verwirrender machen.
Ergebnis 2. Möglichkeit Code link
Ergebnis 3. Möglichkeit Code link