2013-03-10 2 views
4

저는 AVFoundation을 사용하여 비디오 카메라 UI를 만들고 있습니다. 포함하는 viewcontroller는 LandscapeRight 방향으로 만 표시됩니다. 미리 층을 통해 출력 방향을 변경하는 경우, 올바르게 표시AVCaptureVideoPreviewLayer의 방향 변경 관련 문제

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession]; 
self.previewLayer.orientation = AVCaptureVideoOrientationLandscapeRight; 
[self.displayContainer.layer addSublayer:self.previewLayer]; 

는 그러나, 나는 AVCaptureVideoPreviewLayer의 방향 속성이 AVCaptureConnection.videoOrientation 찬성되지 않습니다 실현. 대신 사용하는 경우 :

self.previewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight; 

미리 층 방향에 대해 서로 다른 옵션을 시도하는 경우에도, 모든 방향을 변경 나타나지 않습니다. 이것을 권장 방법으로하기 위해 제가 놓친 다른 단계가 있습니까?

편집 : 아래

뷰 컨트롤러에 존재하는 자동 회전 방법은 다음과 같습니다

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscapeRight; 
} 

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

해결 방법 :이 해결

모두 @ Spectravideo328의 대답에 조언을 모두 적용하고, displayContainer 하위보기가 아니라 ViewControllers보기 레이어에 미리보기 레이어를 추가합니다.

+0

아래의 업데이트 된 답변을 참조하십시오. – Spectravideo328

답변

1

문제는 AvCaptureVideoPreviewLayer 문제가 아니라 일반적으로 CALayer 문제 (previewLayer는 하위 클래스 임)입니다.

모든 CALayers는 프레임을 설정해야합니다 : 귀하의 경우에, 난 그냥 코드에 추가합니다 :

self.previewlayer.frame=self.view.bounds. 

당신이 self.view.bounds을 사용하고 그래서 self.view.frame하지 않는 것이 중요합니다 미리보기 레이어 크기는 장치가 회전 된 경우 회전 (조정)됩니다.

희망이 도움이됩니다.

업데이트 : 이것은 supportedInterfaceOrientations 도와 설명으로부터된다 :

사용자가 장치의 방향을 변경

, 시스템은 루트 뷰 컨트롤러 또는 윈도우를 채우기 최상위 제시 뷰 컨트롤러이 메소드를 호출한다. 뷰 컨트롤러가 새 방향을 지원하면 창 및 뷰 컨트롤러가 새 방향으로 회전됩니다. 이 메서드는 뷰 컨트롤러의 shouldAutorotate 메서드가 YES를 반환하는 경우에만 호출됩니다.

shouldAutorotate를 업데이트하면 항상 YES가 반환됩니다.

+0

한계와 프레임에 대한 메모를 보내 주셔서 감사합니다. 그 차이를 알지 못했습니다. 그러나이 문제는 해결되지 않습니다. 어떤 방향 값을 사용했는지에 관계없이 미리보기 레이어는 변경되지 않은 것처럼 보입니다. – Chris

+0

@Chris, 나는 이것이 문제가 될 수있는 몇 가지 다른 장소가 있다고 생각합니다. 이걸로 시작합시다 : 여러분 VC에서 shouldAutorotateToInterfaceOrientation을 사용하여 VC가 어떤 방향을 수용 할 수 있는지 알려주시겠습니까? – Spectravideo328

+0

그냥 원래 질문을 업데이트했습니다. – Chris