Проблема с вращением панели навигации iPhone при выходе из фонового режима

#objective-c #cocoa-touch #ios4 #background #orientation

#objective-c #cocoa-touch #ios4 #фон #ориентация

Вопрос:

Хорошо, итак, после нескольких недель головной боли я сдался и решил обратиться к экспертному ресурсу онлайн!

В принципе, я пытаюсь настроить мое приложение для iphone для просмотра в принудительном альбомном режиме (если быть точным, для графика) всего для 1 контроллера просмотра в противном случае приложение для панели навигации с преобладанием портретной ориентации.

У меня все работает так, как должно, ЗА исключением того, что когда я переводлю приложение в фоновый режим и возвращаюсь, приложение возвращается с панелью навигации, перемещенной туда, где она обычно находится в режиме портретной ориентации, но повернутой на 90 ‘, в то время как все остальные, такие как строка состояния, основной вид, все еще находятся в альбомном режиме.

После этого я попытался вручную исправить ориентацию панели навигации, но cocoa, похоже, игнорирует этот фрагмент кода. Это почти так, как если бы self.view.transform не работал, когда приложение возвращается из фонового режима. Есть предложения?

LandscapeViewController.m

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

-(void)viewWillAppear:(BOOL)animated {
    self.view.transform = CGAffineTransformMakeRotation((M_PI * (90) / 180.0));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}  
  

На этом изображении показано, что вы можете понять, что я имею в виду

изображение
http://i.stack.imgur.com/Qx1Si.png

Комментарии:

1. Я не знаю, поможет ли это, но вы должны понимать, что представление контроллеров навигации не относится к вашему представлению контроллеров просмотра. Это представление экземпляра UINavigationController. Итак, когда вы вызываете self.view.transform … и self.view.bounds… это не повлияет на панель навигации.

Ответ №1:

Вы пробовали это?

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

Комментарии:

1. Да, я пробовал это, но все еще не исправлено. Выглядит как на картинке здесь — i.imgur.com/Qx1Si.png

Ответ №2:

Вы не должны всегда возвращать NO из shouldAutorotateToInterfaceOrientation: но возвращайте YES для ориентации, которую вы поддерживаете. Затем iOS обрабатывает остальное.

Комментарии:

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