public void SetupOrientationAndTransform()
        {
            var roi = RegionOfInterest;

            ROIToGlobalTransform = CGAffineTransform.MakeTranslation(roi.X, roi.Y);
            ROIToGlobalTransform = CGAffineTransform.Scale(ROIToGlobalTransform, roi.Width, roi.Height);
            switch (CurrentOrientation)
            {
            case UIDeviceOrientation.LandscapeLeft:
                TextOrientation     = ImageIO.CGImagePropertyOrientation.Up;
                UIRotationTransform = CGAffineTransform.MakeIdentity();
                break;

            case UIDeviceOrientation.LandscapeRight:
                TextOrientation     = ImageIO.CGImagePropertyOrientation.Down;
                UIRotationTransform = CGAffineTransform.MakeTranslation(1, 1);
                UIRotationTransform = CGAffineTransform.Rotate(UIRotationTransform, (nfloat)Math.PI);
                break;

            case UIDeviceOrientation.PortraitUpsideDown:
                TextOrientation     = ImageIO.CGImagePropertyOrientation.Left;
                UIRotationTransform = CGAffineTransform.MakeTranslation(1, 0);
                UIRotationTransform = CGAffineTransform.Rotate(UIRotationTransform, (nfloat)Math.PI / 2);
                break;

            default:
                TextOrientation     = ImageIO.CGImagePropertyOrientation.Right;
                UIRotationTransform = CGAffineTransform.MakeTranslation(0, 1);
                UIRotationTransform = CGAffineTransform.Rotate(UIRotationTransform, -(nfloat)Math.PI / 2);
                break;
            }
            VisionToAVFTransform = CGAffineTransform.Multiply(ROIToGlobalTransform, BottomToTopTransform);
            VisionToAVFTransform = CGAffineTransform.Multiply(VisionToAVFTransform, UIRotationTransform);
        }
 public ViewController(IntPtr handle) : base(handle)
 {
     MaskLayer            = new CAShapeLayer();
     CurrentOrientation   = UIDeviceOrientation.Portrait;
     captureSession       = new AVCaptureSession();
     VideoDataOutput      = new AVCaptureVideoDataOutput();
     VideoDataOutputQueue = new DispatchQueue("VideoDataOutputQueue");
     RegionOfInterest     = new CGRect(0, 0, 1, 1);
     TextOrientation      = ImageIO.CGImagePropertyOrientation.Up;
     UIRotationTransform  = CGAffineTransform.MakeIdentity();
     BottomToTopTransform = CGAffineTransform.MakeScale(1, -1);
     BottomToTopTransform = CGAffineTransform.Translate(BottomToTopTransform, 0, -1);
     ROIToGlobalTransform = CGAffineTransform.MakeIdentity();
     gestureRecognizer    = new UITapGestureRecognizer((gesture) => {
         HandleTap();
     });
 }