저는이 AVFoundation 카메라 앱을 가지고 있습니다. 카메라 미리보기는 didOutputSampleBuffer 메서드에 의해 적용된 필터의 결과입니다. 애플은 흑 마술을 사용하여 카메라의 미리보기 방향을 잡았습니까?
나는 카메라 설정 나는 사과가 샘플 코드 ( CIFunHouse) 중 하나에 무슨 짓을했는지 다음입니다 :// setting up the camera
CGRect bounds = [self.containerOpenGL bounds];
_eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
_videoPreviewView = [[GLKView alloc] initWithFrame:bounds
context:_eaglContext];
[self.containerOpenGL addSubview:_videoPreviewView];
[self.containerOpenGL sendSubviewToBack:_videoPreviewView];
id<MTLDevice> device = MTLCreateSystemDefaultDevice();
NSDictionary *options = @{kCIContextUseSoftwareRenderer : @(NO),
kCIContextPriorityRequestLow : @(YES),
kCIContextWorkingColorSpace : [NSNull null]};
_ciContext = [CIContext contextWithEAGLContext:_eaglContext options:options];
[_videoPreviewView bindDrawable];
_videoPreviewViewBounds = CGRectZero;
_videoPreviewViewBounds.size.width = _videoPreviewView.drawableWidth;
_videoPreviewViewBounds.size.height = _videoPreviewView.drawableHeight;
dispatch_async(dispatch_get_main_queue(), ^(void) {
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);
_videoPreviewView.transform = transform;
_videoPreviewView.frame = bounds;
});
self.containerOpenGL
전체 화면보기이며, 화면의 네 모서리에 제한됩니다. 자동 회전이 켜져 있습니다.
그러나 이것은 문제 ...
때 I 설치GLKView
self.ciContext
및 그 장치를 가정하면, 특정 방향에 생성된다. 장치가 특정 방향에 있고 응용 프로그램을 실행하는 경우
previewView
은 전체
self.containerOpenGL
영역에 맞지만 장치를 회전하면
previewView
이 가운데에 위치합니다.
저는 Apple 코드가 완벽하게 작동하며 어떤 제약도 사용하지 않는 것을 봅니다. 자동 회전 방법을 사용하지 않고 didLayoutSubviews
을 사용하지 않고 장치를 회전하고 코드를 실행하면 모든 내용이 미리보기를 제외하고 회전합니다. 그리고 그보다 더 나쁜 것은 내 previewView
이 회전하는 것처럼 보이지만 회전하지는 않습니다.
검은 색 마술입니까? 그들이 어떻게합니까?
유연한 너비와 높이의 자동 크기 조정을 사용하고 있습니까? – agibson007