Ориентация AVCaptureVideoPreviewLayer при вращении

Простой вопрос: как изменить ориентацию AVCaptureVideoPreviewLayer, когда iPhone поворачивается с портретного на альбомный, и наоборот.

Я знаю, что этот вопрос задан много раз, и я не первый, кто столкнулся с ним, но я пробовал все доступные решения, которые я мог бы найти в Google или найти, но он все еще не работает.

Код, который я использовал для настройки AVCapture. Как вы можете видеть, я отслеживаю изменения ориентации

-(IBAction)InitiateCamera { [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; //APPLE CODE NSError *error = nil; // Create the session session = [[AVCaptureSession alloc] init]; // Configure the session to produce lower resolution video frames, if your // processing algorithm can cope. We'll specify medium quality for the // chosen device. session.sessionPreset = AVCaptureSessionPresetLow; // Find a suitable AVCaptureDevice device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // Create a device input with the device and add it to the session. AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; if (!input) { // Handling the error appropriately. } [session addInput:input]; // Create a VideoDataOutput and add it to the session AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; [session addOutput:output]; // Configure your output. dispatch_queue_t queue = dispatch_queue_create("myQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; dispatch_release(queue); // Specify the pixel format output.videoSettings = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]; // If you wish to cap the frame rate to a known value, such as 15 fps, set // minFrameDuration. output.minFrameDuration = CMTimeMake(1, 15); avLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; CGRect bounds=self.view.layer.bounds; avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; avLayer.bounds=bounds; avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)); //avLayer.backgroundColor = [[UIColor blackColor] CGColor]; [self.view.layer insertSublayer:avLayer atIndex:1]; // Start the session running to start the flow of data [session startRunning]; // Assign session to an ivar. [self setSession:session]; } 

Я использовал этот пост в качестве ответа, чтобы попытаться изменить ориентацию вида AVCapture. IOS CAlayer Orientation AVCaptureVideoPreviewLayer не вращается

 - (void) orientationChanged:(NSNotification *)notification { [self rotateLayer]; } -(void)rotateLayer { CGRect layerRect = [[[self view] layer] bounds]; UIDeviceOrientation orientation =[[UIDevice currentDevice]orientation]; switch (orientation) { case UIDeviceOrientationLandscapeLeft: avLayer.affineTransform = CGAffineTransformMakeRotation(M_PI+ M_PI_2); // 270 degress break; case UIDeviceOrientationLandscapeRight: avLayer.affineTransform = CGAffineTransformMakeRotation(M_PI_2); // 90 degrees break; case UIDeviceOrientationPortraitUpsideDown: avLayer.affineTransform = CGAffineTransformMakeRotation(M_PI); // 180 degrees break; default: avLayer.affineTransform = CGAffineTransformMakeRotation(0.0); [avLayer setBounds:layerRect]; break; } [avLayer setPosition:CGPointMake(CGRectGetMidX(layerRect),CGRectGetMidY(layerRect))]; } 

Проблема заключается в том, что, поскольку вы можете видеть мои скриншоты, изначально все отображается правильно, но после поворота устройства просматривается вид AVCapture. Любые предложения относительно того, что я делаю неправильно в rotateLayer?

введите описание изображения здесьвведите описание изображения здесьвведите описание изображения здесь

Interesting Posts

dequeueReusableCellWithIdentifier forIndexPath

как добавить пользовательский ключ к клавиатуре в ios?

GCD-> blocks-> C ++ -> SQLCipher: память Sqlite3MemMalloc не освобождается после завершения задачи

Не удалось найти раскадровку под названием «MainStoryBoard» в комплекте NSBundle

Внедрить протокол Swift с использованием объекта Objective-C getter

ios 9 – xcode 7 – SFSafariViewController – Загрузка изображения – Черный экран камеры

в чем разница, если я верну «ДА» или «НЕТ», когда я вызову textFieldShouldReturn

Использование UIControlEventTouchDragEnter для запуска метода кнопки … но не работает?

Как проигрывать видео в YouTube в UIWebView отключен?

Можете ли вы хранить функции в массиве Objective C?

Как создать трюк с использованием Swift (XCTest)

Удаление уведомлений на основе местоположения, когда пользователь выходит из региона

XCode: Организатор больше не показывает отчеты о сбоях

Оттенок на UIToolBar при полупрозрачности – false

iOS – изменение размера нескольких изображений с помощью разделителей касания

Давайте будем гением компьютера.