2014-07-25 6 views
1

현재 비디오 녹화 및 편집을위한 응용 프로그램을 개발 중입니다. 구멍 응용 프로그램은 가로 모드 만 지원하므로 풍경에 카메라 컨트롤을 사용하고 싶습니다. 그러나 미리보기 화면은 항상 다시 세로로 전환됩니다. 비슷한 질문이 전에 (camera preview is portrait in landscape app) 요청되었지만 슬프게도 어떤 대답도 받아 들여지지 않았습니다.UIImagePickerController - 비디오 미리보기를 가로로 바꿈

내가 시도 몇 가지 접근 방법 :

먼저 내가 수동으로 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; 
} 

결과 : 그럼이 UIImagePickerController 보여 presentViewController을 사용

The preview is displayed in the correct orientation, but the camera image is turned sideways.

- 카메라의 녹화가 완벽하게 잘 작동하지만 미리보기 화면이 세로에서 내가 가지고 내 장치가 작동하도록 할 수 있습니다.

코드 :

- (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에 listend

The preview screen is turned upside down, so that I have to turn my device to use the controls.

가 감지 할 수 -하지만 년후 미리보기의 프레임 크기를 조정할 수 없습니다.

코드 :

- (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); 
    } 
} 

결과 : The screen dimensions of the preview are wrong.

내 구멍 응용 프로그램을 사용할 수 있도록 내가 어떤 힌트 또는 I 가로 모드에서 카메라와 미리보기를 사용할 수있는 방법을 제안 정말 감사하겠습니다 이 과정에서 장치를 돌리지 않고 (응용 프로그램을 사용하는 동안 장치가 삼각대에 놓이게되어 회전 할 수 없습니다.)

감사합니다. UIImagePickerController를 클래스는 세로 모드를 지원하여 UIImage 선택기보기는 여기에 가로 모드에서 사용할 수 없습니다

답변

0

사과가

mportant에 대한 말씀입니다. 이 클래스는 그대로 사용하도록 (듯이) 설계되어있어 서브 클래스 화를 서포트하지 않습니다. 이 클래스의 뷰 계층 구조는 비공개이며 한 가지 예외를 제외하고는 수정해서는 안됩니다. 사용자 정의보기를 cameraOverlayView 속성에 할당하고 해당보기를 사용하여 추가 정보를 제공하거나 카메라 인터페이스와 코드 간의 상호 작용을 관리 할 수 ​​있습니다.

당신은 당신은 세로로 모달, 잠금 회전과 같은 뷰 컨트롤러를 표시하고 모션 센서를 듣고 거기에서 회전을 감지 할 수 https://developer.apple.com/library/ios/documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html#//apple_ref/doc/uid/TP40007070-CH3-DontLinkElementID_1

0

여기에서 그것에 대해 자세한 내용을보실 수 있습니다.이런 식으로 뭔가 :이 당신에게

하는 데 도움이

[videoConnection setVideoOrientation:currentOrientation]; 

희망 :

self.motionManager = [[CMMotionManager alloc] init]; 
self.motionManager.accelerometerUpdateInterval = 0.5f; 
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] 
             withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
              float x = -accelerometerData.acceleration.x; 
              float y = accelerometerData.acceleration.y; 
              float angle = atan2(y, x); 

              if(angle >= -2.25 && angle <= -0.75) { 
               currentOrientation = UIInterfaceOrientationPortrait; 
              } else if(angle >= -0.75 && angle <= 0.75){ 
               currentOrientation = UIInterfaceOrientationLandscapeRight; 
              } else if(angle >= 0.75 && angle <= 2.25) { 
               currentOrientation = UIInterfaceOrientationPortraitUpsideDown; 
              } else if(angle <= -2.25 || angle >= 2.25) { 
               currentOrientation = UIInterfaceOrientationLandscapeLeft; 
              } 
             }]; 

은 이후에 당신은에 저장하기 전에 이미지를 회전 제대로하기 위해 currentOrientation을 사용할 수 있습니다

관련 문제