大佬教程收集整理的这篇文章主要介绍了ios – 在旋转时自动调整AVCaptureVideoPreviewLayer大小的问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// code in ViewfinderViewController.m previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession]; previewLayer.frame = self.view.bounds; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [self.view.layer addSublayer:previewLayer];
ViewfinderViewController还进行一些视频处理,并提供框架的用户注册一些委托方法,以防发现感兴趣或在其中一个处理过的帧中找不到.
在我的实际应用程序的viewDidLoad方法中,我创建了一个ViewfinderViewController实例,设置它的框架并将其视图添加为子视图:
// code in the app's view controller viewDidLoad method ViewfinderViewController *vfVC = [[ViewfinderViewController alloc] init]; vfVC.view.frame = self.view.bounds; [self.view addSubview:vfVC.view];
只要我无视旋转(我直到现在这样做),这样做很好.我的主要问题是,ViewfinderViewController.view调整了框架的大小,但AVCaptureVideoPreviewLayer却没有.我有点困惑:请不要自动调整previewLayer的大小,因为对应于它的superLayer的视图是否正确调整大小?
有任何想法吗?我很乐意提供更多信息,但为了缩短问题,我现在不再进一步了解.谢谢.
- (void)viewWillAppear:(BOOL)animated; { if ([self.childViewControllers containsObject:self.viewfinderViewController] == NO) { [self addChildViewController:self.viewfinderViewController]; self.viewfinderViewController.view.frame = self.view.bounds; [self.view addSubview:self.viewfinderViewController.view]; [self.viewfinderViewController didMoveToParentViewController:self]; } }
这样,willAnimateRotationToInterfaceOrientation:方法将被自动调用,我之前从视图控制器转发,它将取景器的视图添加为子视图.
此外,我在ViewfinderViewController的这个方法中更新previewLayer大小:
- (void)viewWillLayoutSubviews; { self.previewLayer.frame = self.view.bounds; }
我通过实现这两个方法来处理previewLayer的旋转:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [CAtransaction begin]; [CAtransaction setAnimationDuration:duration]; [CAtransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaSEOut]]; [self updatePreviewLayerForOrientation:toInterfaceOrientation]; [CAtransaction commit]; } - (void)updatePreviewLayerForOrientation:(UIInterfaceOrientation)interfaceOrientation; { // correct position of previewLayer CGSize newSize = self.view.bounds.size; self.previewLayer.position = CGPointMake(0.5 * newSize.width,0.5 * newSize.height); // rotate the previewLayer,in order to have camera picture right switch (interfaceOrientation) { case UIInterfaceOrientationPorTrait: [self.previewLayer setAffineTransform:CGAffineTransformMakeRotation(0)]; break; case UIInterfaceOrientationLandscapeLeft: [self.previewLayer setAffineTransform:CGAffineTransformMakeRotation(M_PI/2)]; break; case UIInterfaceOrientationLandscapeRight: [self.previewLayer setAffineTransform:CGAffineTransformMakeRotation(-M_PI/2)]; break; case UIDeviceOrientationPorTraitUpsideDown: [self.previewLayer setAffineTransform:CGAffineTransformMakeRotation(M_PI)]; break; default: break; } }
我希望这可以帮助每个将AVCaptureVideoPreviewLayer添加为子图层的人,并且在界面旋转时遇到调整大小和方向的问题.
以上是大佬教程为你收集整理的ios – 在旋转时自动调整AVCaptureVideoPreviewLayer大小的问题全部内容,希望文章能够帮你解决ios – 在旋转时自动调整AVCaptureVideoPreviewLayer大小的问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。