与横向的UIImagePickerController录像(UIImagePickerControl

2019-08-17 12:50发布

我们怎样才能强迫的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我需要在录制过程中锁定在横向屏幕方向。

Answer 1:

你需要实现自定义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的记录类。 将它设置falseviewDidUnload 。 或者可能是viewWillAppear另一个类的。

3)我已经使用cameraviewcontroller.m只是作为一个例子。 这反映了你记录类。 此外,在视频录制类的shouldAutorotate方法,如果检测到的方向是纵向,只返回NO。 通过这种方式,用户界面不会改变,你只能保持在UI景观。



Answer 2:

试试这个上可以将其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工作... :)



文章来源: UIImagePickerController record video with landscape orientation