iOS CAlayer Orientation AVCaptureVideoPreviewLayer doesn't rotate

后端 未结 8 750
既然无缘
既然无缘 2020-12-24 09:50

\"enter Summary: I can\'t force the CALayer to respond correctly to orientati

8条回答
  •  醉话见心
    2020-12-24 10:25

    // layout iOS 8+ animated 
    - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator
    {
        [coordinator animateAlongsideTransition:^(id context)
        {
             NSString *timingFunc = nil;
             switch ( [context completionCurve] )
             {
                 case UIViewAnimationCurveEaseIn:    timingFunc = kCAMediaTimingFunctionEaseIn;          break;
                 case UIViewAnimationCurveEaseInOut: timingFunc = kCAMediaTimingFunctionEaseInEaseOut;   break;
                 case UIViewAnimationCurveEaseOut:   timingFunc = kCAMediaTimingFunctionEaseOut;         break;
                 case UIViewAnimationCurveLinear:    timingFunc = kCAMediaTimingFunctionLinear;          break;
             }
    
             [CATransaction begin];
             [CATransaction setAnimationDuration:[context transitionDuration]];
             [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:timingFunc]];
             [self updatePreviewLayer];
             [CATransaction commit];
    
             UIInterfaceOrientation toOrientation = [[UIApplication sharedApplication] statusBarOrientation];
             // layout ui if needed
    
        } completion:^(id context)
        {
    
        }];
    
        [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    }
    
    - (void)updatePreviewLayer
    {
        CGAffineTransform transform = CGAffineTransformIdentity;
        switch ( UIDevice.currentDevice.orientation )
        {
            case UIDeviceOrientationLandscapeLeft:
                transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
            case UIDeviceOrientationLandscapeRight:
                transform = CGAffineTransformRotate(transform, M_PI_2);
            break;
            case UIDeviceOrientationPortraitUpsideDown:
                transform = CGAffineTransformRotate(transform, M_PI);
            break;
            default:
            break;
        }
        preview.affineTransform = transform;
        preview.frame = self.view.bounds;
    }
    

提交回复
热议问题