Камера не вращается должным образом в бета-версии iOS8 для старых проектов

Я работаю над приложением iOS, созданным с использованием более старой версии X-Code, поэтому у него есть окно в MainWindow.xib. Недавно, когда я запускал этот проект в бета-версии iOS8, у меня возникла проблема: окно не поворачивается в альбомной ориентации. Поэтому я добавил еще одно окно в MainWindow.xib. Я сделал условие для проверки версий ОС, для более старой версии iOS я использую ранее созданное окно, но для iOS8 я использую недавно добавленное окно для альбомной ориентации. Я решил проблему. Все приложение работает нормально, кроме камеры.

Ниже приведены снимки экрана.

В ландшафтном режиме (работает правильно): введите здесь описание изображения

В портретном режиме (как только камера загружена, я повернул ее, здесь другие элементы управления вращаются правильно, но камера не вращается должным образом):

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

После загрузки камеры в ландшафтном режиме я повернул устройство, элементы управления вращаются правильно, но экран камеры не вращается, он все еще находится в портретном режиме. Это может быть связано с окном в Appdelegate.

Любое решение для этого?

Заранее спасибо.


person Ashok    schedule 05.08.2014    source источник
comment
Проверьте приложение камеры... возможно, это ошибка бета-версии.   -  person Andrea    schedule 06.08.2014
comment
Нет, я не решил ее. @Boni2k   -  person Ashok    schedule 10.09.2014
comment
Здесь такая же проблема! - В заключение: довольно сложно привести правильный пример кода, так как части, связанные с ротацией приложений iOS, очень далеки друг от друга!   -  person Blitz    schedule 11.09.2014
comment
У меня точно такая проблема. странное поведение при запуске в портретном режиме, запуск в альбомной ориентации кажется нормальным.   -  person Rufus    schedule 13.09.2014
comment
@Rufus да, начальная ориентация работает нормально. Вращение портит картинку. Это можно воспроизвести даже в очень простом проекте UIImagePickerController. Только элементы управления камерой должны вращаться, но сам предварительный просмотр не должен...   -  person Boni2k    schedule 15.09.2014


Ответы (3)


У меня такая же проблема.
Я пытался использовать cameraViewTransform.

Ниже

#import "MyUIImagePickerController.h"

@implementation MyUIImagePickerController

bool rotateFlg = false;
UIInterfaceOrientation startupOrientation;

-(id)init{
    startupOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    return [super init];
}

-(NSUInteger)supportedInterfaceOrientations {
    // iOS 8
    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) {
        float lotate[4];
        if (startupOrientation == UIInterfaceOrientationLandscapeRight || startupOrientation == UIInterfaceOrientationLandscapeLeft) {
            lotate[0] = 90.0f;
            lotate[1] = -90.0f;
            lotate[2] = 180.0f;
            lotate[3] = 0.0f;
        } else {
            lotate[0] = 0.0f;
            lotate[1] = 180.0f;
            lotate[2] = 90.0f;
            lotate[3] = -90.0f;
        }

        UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
        if(orientation ==UIInterfaceOrientationPortrait ){
            CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[0] * M_PI / 180.0f);
            self.cameraViewTransform = __rotation;
            rotateFlg = true;
        }
        else if(orientation == UIInterfaceOrientationPortraitUpsideDown){
            CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[1] * M_PI / 180.0f);

            self.cameraViewTransform = __rotation;
            rotateFlg = true;
        } else if(orientation == UIInterfaceOrientationLandscapeLeft){
            if (rotateFlg) {
                CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[2] * M_PI / 180.0f);
                self.cameraViewTransform = __rotation;
                rotateFlg = false;
            }
        }else if(orientation == UIInterfaceOrientationLandscapeRight){
            if (rotateFlg) {
                CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[3] * M_PI / 180.0f);
                self.cameraViewTransform = __rotation;
                rotateFlg = false;
            }
        }
    }
    return UIInterfaceOrientationMaskAll;
}
@end

Вроде работает
Но исходник не красивый...

person hiroaki kaneda    schedule 19.09.2014
comment
Я думаю, что это будет исправлено в iOS 8.1. - person hiroaki kaneda; 15.10.2014

Опубликовал то, что я считаю решением, по адресу; https://stackoverflow.com/a/26934067/782533

Похоже, та же проблема? Не уверен, что я должен делать ссылку или копировать/вставлять, так что все равно вот;

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

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    // Had forgot to call the following..
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

Надеюсь, поможет.

person PaulB    schedule 14.11.2014

Согласно этой ветке на форумах разработчиков Apple, ротация в iOS8/XCode6 имеет некоторые проблемы, когда при использовании XIB, но не при использовании раскадровок.

person Paul Slocum    schedule 16.09.2014