2014-08-28 3 views
5

Я работаю над приложением iOS 7, чтобы сделать его совместимым с ios 8 (beta 5). В этой заявке UIViewController (vc1) представляет еще UIViewController (vc2). vc1 поддерживает как портретную, так и ландшафтную ориентации; vc2 поддерживает только портретную ориентацию. Когда представлен vc2, он запрашивает vc1: shouldAutorotateToInterfaceOrientation:, и это возвращает YES.Методы делегирования вращения устройства UIViewController не вызываются в iOS8

В iOS8 (бета-версия 5) willRotateToInterfaceOrientation: и didRotateFromInterfaceOrientation: не вызываются так же, как новый метод API IOS 8 viewWillTransitionToSize. Но это отлично работает в iOS7.

Я знаю, что willAnimateRotationToInterfaceOrientation и didRotateFromInterfaceOrientation устарели в iOS 8, но даже методы делегатов iOS 8 не вызываются. Каждый раз при запуске vc2 от vc1 всегда экранирует нагрузки в портретном режиме, даже если я упоминал о поддерживаемой ориентации интерфейса как альбомной слева.

Любые идеи ... это ошибка в iOS8?

+0

Возможно, вы захотите ознакомиться с этим http://stackoverflow.com/questions/25238620/ios-8-rotation-methods-deprecation-backwards-compatibility – rahulinaction

+0

Пройдите по этой ссылке http://stackoverflow.com/ вопросы/25935006/ios8-интерфейс-Rotation-метода-не называемая –

ответ

2

Ну, я не понял вашу проблему лучше, но как только у меня будет множество линий, работающих отлично с поворотом в iOS 8.1, я представлю их вам. Они просто взяты и немного отредактированы из справочника Apple API.

Просто я помещаю это в каждый VC, и я просто редактирую код при необходимости. Например, у меня есть приложение, у которого есть начальный контроллер представления на портрете, а затем изменения VC (segue завершено) с LandscapeVC с различными функциями. Это методы портретного вида, приводящие к вращению в LandscapeView.

bool isShowingLandscapeView = false; 

- (void)awakeFromNib 
{ 
    isShowingLandscapeView = NO; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(orientationChanged:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 
} 

- (void)orientationChanged:(NSNotification *)notification 
{ 
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && 
     !isShowingLandscapeView) 
    { 
     isShowingLandscapeView = YES; 
     [self performSegueWithIdentifier:@"toLandscape" sender:self]; 
    } 

Надеюсь, я сделал это простым для понимания. Не стесняйтесь улучшать свой ответ, мы все учимся в этой жизни!