Поворот камеры и OverlayView в iOS8

У меня возникла проблема при использовании iPad Camera в iOS 8. Я видел некоторые старые вопросы и ветку на форумах разработчиков Apple во время бета-тестирования, но до сих пор не нашел решения.

Кажется, есть две части этого вопроса.

1) Сама камера вращается, когда вращается ориентация устройства, например, мир на его стороне

2) При открытии камеры в альбомной ориентации наложение не появляется. При открытии в Портретном это нормально.

Это приложение, использующее iOS7 в качестве базового SDK, проблема возникает только при запуске приложения на устройстве, которое было обновлено до iOS8. Приложение не использует раскадровки, оно использует перья.

Я надеюсь выпустить исправление для этого с помощью Xcode 5.1.1, прежде чем перейти к конкретным исправлениям для iOS8 и использовать его в качестве базового SDK в следующей версии.

Вот мой код для вызова камеры:

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) {

    // Create Camera

    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;
    imagePicker.delegate = self;
    imagePicker.showsCameraControls = NO;

    // Set up custom controls view

    [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
    self.overlayView.frame = imagePicker.cameraOverlayView.frame;
    imagePicker.cameraOverlayView = self.overlayView;
    self.overlayView = nil;

    // Show Camera

    [self presentViewController:imagePicker animated:NO completion:nil];

    [imagePicker release];

}

Я также пытался

И макет панели инструментов (сидит внизу) в OverlayView:

Макет панели инструментов

Если я изменю это, чтобы сидеть "наверху", это появляется и в портретном и в альбомном! Так что это должно быть связано с размером представления / окна / чего-либо, хотя странно, как его поведение изменится, если макет останется прежним.

Я попробовал это с обоими showsCameraControls = YES и хеширование OverlayView блок, и проблема № 1 сохраняется, так что это не связано с оверлеем в приложении.

Я надеюсь, что кто-то нашел ответ на этот вопрос, это кажется довольно распространенной проблемой.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Редактировать 1: Исправлено наложение (выпуск № 2)

Он не применял ориентацию к OverlayView, исправил это так:

// Grab the window frame and adjust it for orientation - from http://stackru.com/a/15707997/520902

UIView *rootView = [[[UIApplication sharedApplication] keyWindow]
                        rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect screenFrame = [rootView convertRect:originalFrame fromView:nil];
...
self.overlayView.frame = imagePicker.cameraOverlayView.frame;

Я подозреваю, что это связано с тем, что камера не понимает, что она также ориентирована, и будет продолжать искать решение проблемы #1.

Редактировать 2: Обновление по вопросу № 1

Похоже, что вращение камеры может быть проблемой Apple. На iOS8, если вы откроете приложение "Контакты", отредактируете контакт и выберете "Сделать фотографию", возникнет точно такая же проблема - в приложении Apple по умолчанию!

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

1 ответ

Apple исправила эту проблему в iOS 8.1.

Другие вопросы по тегам