Подтвердить что ты не робот

IOS: ориентация камеры

Я хочу захватить изображение с помощью камеры с помощью AVCaptureSession.

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

Во-первых, я хочу поддерживать левую и правую ориентацию ландшафта и позже может быть портретными режимами.

Я реализую:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation{ 
return UIInterfaceOrientationIsLandscapse(interfaceOrientation);
}

Когда я поворачиваю устройство, он поворачивает приложение из пейзажа влево или вправо вправо или наоборот, но я вижу камеру только когда я нахожусь на левом краю. Когда приложение находится в горизонтальном положении, видео поворачивается на 180 градусов.

Большое спасибо.

Update:

Я пробовал ответить Spectravideo328, но у меня есть ошибка, когда я пытаюсь повернуть устройство и сбой приложения. Это ошибка:

[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210'

Ошибка в этой строке:

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection;

Я положил его внутрь метода toAutorotateToInterfaceOrientation. Знаете ли вы, что может быть причиной этой ошибки?

Спасибо

4b9b3361

Ответ 1

По умолчанию ориентация камеры довольно странная. UIInterfaceOrientationLeft.

Ориентация камеры не изменяется при вращении устройства. Они отделены друг от друга. Вы должны настроить ориентацию камеры вручную:

Поместите следующее в метод, который вы передаете в InterfaceOrientation (возможно, вы назовете его из shouldAutorotateToInterfaceOrientation выше, чтобы устройство вращалось и камера вращается):

Сначала вы должны получить предварительное соединение Layer

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection;

if ([previewLayerConnection isVideoOrientationSupported])
{
    switch (toInterfaceOrientation)
    {
        case UIInterfaceOrientationPortrait:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];
            break;
        case UIInterfaceOrientationLandscapeRight:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; //home button on right. Refer to .h not doc
            break;
        case UIInterfaceOrientationLandscapeLeft:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; //home button on left. Refer to .h not doc
            break;
        default:
            [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait]; //for portrait upside down. Refer to .h not doc
            break;
    }
}