Проблема с поворотом в ios 8 для просмотра, которые добавляются в окна

Я создал категорию для поворота вида, и добавил виды на вид контроллеров, а также на окно (для отображения пользовательского индикатора). Мой код работает до 7.X с xCode 5.X, а также с xCode6-beta6. Но это не правильно с IOS 8 бета. Кажется, что вращение окон не работает с ios 8 beta, как и в старых ios.

Можете ли вы предложить мне.... Большое спасибо заранее.

Мой код похож

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration {
 if(!self.isIpad)
{

    [menu.view rotateViewToOrientation:newStatusBarOrientation animated:YES];
    if(newStatusBarOrientation==UIInterfaceOrientationPortrait || newStatusBarOrientation==UIInterfaceOrientationPortraitUpsideDown)
    {
        if (IS_IPHONE_5) {
            menu.view.frame= CGRectMake(0, 518, 320, 50);
        } else {
            menu.view.frame= CGRectMake(0, 430, 320, 50);
        }

    }  else if(newStatusBarOrientation==UIInterfaceOrientationLandscapeLeft) {

        if (IS_IPHONE_5) {
            menu.view.frame= CGRectMake(270,0,50,568);
        } else {
            menu.view.frame= CGRectMake(270,0,50,480);
        }

    } else {

        if (IS_IPHONE_5) {
            menu.view.frame= CGRectMake(0,0,50,568);
        } else {
            menu.view.frame= CGRectMake(0,0,50,480);
        }
    }
    [menu reloadMenu];
  }
}


//Method of Menu Class for orientation change setup
- (void)rotateViewToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated {
CGPoint center = self.center;
CGRect bounds = self.bounds;
CGAffineTransform transform = CGAffineTransformIdentity;
int intOri=orientation;
switch (intOri) {
    case UIInterfaceOrientationPortraitUpsideDown:
        transform = CGAffineTransformMakeRotation(M_PI);
        break;
    case UIInterfaceOrientationLandscapeLeft:
        transform = CGAffineTransformMakeRotation(-M_PI_2);
        break;
    case UIInterfaceOrientationLandscapeRight:
        transform = CGAffineTransformMakeRotation(M_PI_2);
        break;
    case UIInterfaceOrientationPortrait:
        transform = CGAffineTransformMakeRotation(0);
        break;

}
if (animated) {
    [UIView beginAnimations:nil context:nil];
}
self.transform = transform;
bounds = CGRectApplyAffineTransform(bounds, transform);
self.bounds = CGRectMake(0, 0, bounds.size.width, bounds.size.height);
self.center = center;
 if (animated) {
    [UIView commitAnimations];
 }
}

3 ответа

Решение

Я пробовал много исправлений... и его работа с патчем, как

{
[self.window setBounds:temp];
[menu.view setFrame:CGRectMake(0, self.window.frame.size.height-50, self.window.frame.size.width, 50)];
[menu.view removeFromSuperview];
[self.window addSubview:menu.view];
[self.window makeKeyAndVisible];
}

и сброс угла до 0 градусов для CGAffineTransformMakeRotation для всех видов режима устройства. для ios 8.

Это не правильное решение, я знаю, но у меня нет альтернативного пути, так что жду хорошего ответа.

В моем случае, просто установив угол поворота на 0 для всех ориентаций, мы решили проблему. До iOS 8 координаты UIWindow всегда были в книжной ориентации, поэтому вам приходилось самостоятельно управлять поворотом. Это больше не нужно в iOS 8. Что касается того, почему вы добавляете UIViews в UIWindow, я делаю это для предупреждений, которые я хочу отображать поверх всего остального, независимо от текущей иерархии представлений.

Была похожая проблема. Удивительно, но исправлением было закомментировать весь код, связанный с self.window в Appdelegate.

Прокомментированная инициализация self.window и его назначение. Установите начальное представление в раскадровке в Инспекторе атрибутов, установив флажок "Является начальным представлением контроллера".

Новое лучшее решение
Комментирование self.window вызывало другие проблемы. Вместо приведенного ниже кода лучше:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification 
    {
         [UIViewController attemptRotationToDeviceOrientation];
    }
Другие вопросы по тегам