我们怎样才能强迫的UIImagePickerController控制器仅在横向模式下录制视频?
我知道,这个类应该用于人像拍摄,但我需要有它在的风景线。
发现几个类似的问题,但没有这对我的作品的任何解决方案(的iOS 6.1)。
对于设备方向的例子观察不为我工作(这个答案- https://stackoverflow.com/a/2147584/775779 )
如果我实现的UIImagePickerController类像下面这样:
#import "UIImagePickerController+NonRotating.h"
@implementation UIImagePickerController (NonRotating)
- (BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
@end
它几乎工作,但我看到的记录(结果视频是确定)期间的一些控制和错误的视频方向的一些奇怪的行为。
1)启动。 取消并在合适的岗位上记录按钮,但在错误的其他控件。 而视频旋转。
2)记录。 定时器和视频都是错误的。
3)记录结束。 都好! 其结果视频是正确的。
你有什么想法?
UPDATE我需要在录制过程中锁定在横向屏幕方向。
你需要实现自定义UIImagePickerController
。 对于这一点,你需要imagepicker的属性设置showsCameraControls
为FALSE。
self.mImagePickerController.showsCameraControls = NO;
self.mImagePickerController.wantsFullScreenLayout = YES;
一旦你这样做,没有默认的控制将是你看到。 你需要设置自定义按钮启动/停止记录和翻转摄像机等。
现在,您可以使用启动/停止方法来记录视频:
当一个人点击开始记录,
[self.mImagePickerController startVideoCapture];
停止,
[self.mImagePickerController stopVideoCapture];
为了跟踪开关的相机之间,你可以使用一个标志
if (self.mImagePickerController.cameraDevice == UIImagePickerControllerCameraDeviceRear)
{
self.mImagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
isFrontCamera = YES;
}
else
{
self.mImagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
isFrontCamera = NO;
}
如你所愿的方向变化,您可以设置控件。 AppDelegate.m
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
这是一个被称为与方向变化的委托。 您可以使用特定的类的对象根据方向来调用它shouldAutorotate方法和设置您的相机控制仓位。
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
[self.objController shouldAutorotate];
return UIInterfaceOrientationMaskAll;
}
现在里面cameraviewcontroller.m
-(BOOL)shouldAutorotate
{
UIInterfaceOrientation interfaceOrientation = [[UIDevice currentDevice]orientation];
if(interfaceOrientation == UIInterfaceOrientationPortrait)
{
// your controls setup
}
else
{
// view accordingly for landscape
}
}
我试图覆盖所有的点。 让我知道如果您有任何困惑。 希望能帮助到你 :)
1)您需要检查翻转相机按钮的单击事件的条件。
2)AppDelegate.h:声明你的类的对象,你录制视频,并创建一个属性。 在这里我使用CameraViewController
作为一个例子。
CameraViewController *objController;
现在AppDelegate.m:
self.objController = [[CameraViewController alloc]initWithNibName:@"CameraViewController" bundle:nil];
现在用这个实例来调用shouldAutorotate
方法,我已经如上图所示。 并返回横向:
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if(isOptionScreenActive == YES)
{
[self.shareController shouldAutorotate];
return UIInterfaceOrientationMaskLandscape;
}
else
{
[self.anotherController shouldAutorotate];
return UIInterfaceOrientationMaskPortrait;
}
}
这里isOptionScreenActive
是一个flag
是在设定viewWillAppear
的记录类。 将它设置false
在viewDidUnload
。 或者可能是viewWillAppear
另一个类的。
3)我已经使用cameraviewcontroller.m只是作为一个例子。 这反映了你记录类。 此外,在视频录制类的shouldAutorotate
方法,如果检测到的方向是纵向,只返回NO。 通过这种方式,用户界面不会改变,你只能保持在UI景观。
试试这个上可以将其w'll帮助你
- (BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationLandscapeRight | UIInterfaceOrientationLandscapeLeft;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
它w'lll工作... :)