问题
I am using the AVCam example App from Apple.
This example uses AVFoundation in order to show video on a view.
I am trying to make from the AVCam a landscape App with no luck.
When screen orientation changes the video is shown rotated on the view. Is there a way of handling this problem?
回答1:
When you create your preview layer:
captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeLeft;
And the methods to manage rotations:
-(void)willAnimateRotationToInterfaceOrientation:
(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration {
[CATransaction begin];
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft){
captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeLeft;
} else {
captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeLeft;
}
[CATransaction commit];
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
-(BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
That worked for me.
回答2:
Are you using the orientation and gravity settings for the preview layer?
previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
previewLayer.frame = CGRectMake(0, 0, 480, 300);
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
previewLayer.orientation = AVCaptureVideoOrientationLandscapeRight;
previewLayer.automaticallyAdjustsMirroring = YES;
回答3:
Declare
- (BOOL)shouldAutorotate;
in your .h .
Then do:
- (BOOL)shouldAutorotate {
return NO;
}
in your .m
This will force it to not rotate.
来源:https://stackoverflow.com/questions/6284650/iphone-app-show-avfoundation-video-on-landscape-mode