2017-12-07 1 views
1

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

Antwort

0

Haben Sie

if let videoPreviewLayerConnection = videoPreviewLayer.connection { 
    videoPreviewLayerConnection.videoOrientation = desiredOrientation 
} 
versucht
Verwandte Themen