これは頭を悩ませています。
私はこのサンプル プロジェクトから作業しています: https://github.com/jj0b/AROverlayExample
これは完全に機能します。唯一の問題は、それがポートレート アプリであることです。そのため、デバイスを横向きに回転させても、ビデオは希望どおりに表示されますが、すべてのラベルと UI が横向きになりました。
これを修正するために、info.plist でのみランドスケープを設定しています
問題はこれです:
これが私のコードです:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
assert( self.autoresizesSubviews );
CGPoint layerRectCenter = CGPointMake( CGRectGetMidX( frame ),
CGRectGetMidY( frame ) );
// Initialization code
self.captureSession = [[[AVCaptureSession alloc] init] autorelease];
// addVideoInput
{
AVCaptureDevice* videoDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeVideo];
if (videoDevice)
{
NSError *error;
AVCaptureDeviceInput* videoIn = [AVCaptureDeviceInput deviceInputWithDevice: videoDevice error:&error];
if ( ! error )
{
if ( [self.captureSession canAddInput:videoIn] )
[self.captureSession addInput:videoIn];
else
NSLog(@"Couldn't add video input");
}
else
NSLog(@"Couldn't create video input");
}
else
NSLog(@"Couldn't create video capture device");
}
// addVideoPreviewLayer
{
self.previewLayer = [[[AVCaptureVideoPreviewLayer alloc] initWithSession: self.captureSession] autorelease];
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.previewLayer.frame = CGRectMake(0, 0, 480, 300);
self.previewLayer.orientation = AVCaptureVideoOrientationLandscapeRight;
//self.previewLayer.frame = frame;
[self.layer addSublayer: self.previewLayer];
}
// run!
[self.captureSession startRunning];
}
return self;
}
ビデオが横向きに表示されている理由がわかりません。特にレイヤーフレームを横向き CGRectMake(0, 0, 480, 300) に設定しているにもかかわらず、逆に表示されています。