【发布时间】:2014-07-25 08:21:50
【问题描述】:
我目前正在开发一个用于录制和编辑视频的应用程序。孔应用程序仅支持横向模式 - 所以我想在横向中使用相机控件。但预览屏幕总是切换回纵向。之前有人问过类似的问题 (camera preview is portrait in landscape app),但遗憾的是没有任何公认的答案。
我尝试了几种方法:
首先我手动添加了UIImagePickerController 的视图 - 预览与我想要的完全一样,但视频图像(录制时)是错误的(侧身)。
代码:
- (BOOL) startCameraController {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO) {
return NO;
}
self.cameraUI = [[UIImagePickerController alloc] init];
self.cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
self.cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
self.cameraUI.allowsEditing = NO;
self.cameraUI.delegate = self.parentViewController;
[self.parentViewController addChildViewController:self.cameraUI];
self.cameraUI.view.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self.parentViewController.view addSubview:self.cameraUI.view];
return YES;
}
结果:
然后我用presentViewController 显示UIImagePickerController - 摄像头录制效果很好,但是预览屏幕是纵向的,我必须转动我的设备才能使用它。
代码:
- (BOOL) startCameraController {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO) {
return NO;
}
self.cameraUI = [[UIImagePickerController alloc] init];
self.cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
self.cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
self.cameraUI.allowsEditing = NO;
self.cameraUI.delegate = self.parentViewController;
[self.parentViewController presentViewController:self.cameraUI animated:YES completion:^{}];
return YES;
}
结果:
我什至听了_UIImagePickerControllerUserDidCaptureItem 事件,以检测相机何时更改为预览并尝试手动转动视图 - 但我无法调整预览视图的框架尺寸。
代码:
- (void) cameraChangedToPreview {
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight) {
self.cameraUI.view.transform = CGAffineTransformMakeRotation(M_PI_2);
} else if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft) {
self.cameraUI.view.transform = CGAffineTransformMakeRotation(-M_PI_2);
}
if (IS_WIDESCREEN) {
self.cameraUI.view.frame = CGRectMake(0, 0, 568, 320);
} else {
self.cameraUI.view.frame = CGRectMake(0, 0, 480, 320);
}
}
结果:
如果有任何提示或建议,我将非常感谢我如何在横向模式下使用相机和预览,这样我就可以在不转动设备的情况下使用我的洞应用程序(设备将在三脚架中,而应用程序用过,所以不能转。)
谢谢你和最美好的祝愿!
【问题讨论】:
标签: ios iphone camera orientation uiimagepickercontroller